Nguyen Hung Son Uniwersytet Warszawski

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

Klasy abstrakcyjne i interfejsy
Programowanie wielowątkowe
Java dla studentów II roku Wydziału Fizyki PW Przemysław Duda, 2012
Mgr inż.Marcin Borkowski Podstawy Java Część II
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe
Programowanie obiektowe
Programowanie obiektowe Andrzej Ziółkowski Wykład 3.
Static, const, volatile.
Java applet (c.d.) Nguyen Hung Son Uniwersytet Warszawski.
Programowanie Obiektowe w Javie (c.d.)
Programowanie obiektowe w Javie
Podstawy języka Java Nguyen Hung Son Uniwersytet Warszawski.
Wybrane elementy języka Java
RMI I RMI-IIOP Wprowadzenie Co to jest RMI?
W ZORCE P ROJEKTOWE … czyli ktoś już rozwiązał Twoje problemy!
Organizacja Przedsięwzięć Programistycznych Testowanie
Programowanie wielowątkowe
Multimedia Obrazy i dźwięki w apletach Javy, praca z tekstem, zdarzenia od myszki, obsługa wyjątków w Javie, aplety z wątkami, animacja poklatkowa.
Programowanie sieciowe w Javie
Gniazda komunikacji sieciowej w języku Java
Andrzej Chybicki Pok. 744 Java – wstęp do języka Andrzej Chybicki Pok. 744.
Plan Prezentacji Wczytywanie grafiki Wyświetlanie obrazów
.NET Remoting Łukasz Zawadzki.
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
142 JAVA – sterowanie i wątki public class A20 extends javax.swing.JApplet implements ActionListener { private int licznik = 0; private JTextField t =
Tablice tablica jest sekwencją elementów tego samego typu (prostego lub obiektowego) w Javie tablice są obiektami, a zmienne tablicowe przechowują referencję
Język Java Wielowątkowość.
Projektowanie warstwy serwera Spring MVC - uzupełnienie.
Test Doubles Adam Gabryś , v1.1,
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Programowanie urządzeń mobilnych – wykład IV
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
W większości języków programowania biblioteki wejścia/wyjścia ukrywają szczegóły obsługi poszczególnych mediów pod abstrakcją strumienia (ang. stream).
Tworzenie aplikacji mobilnych
Automatyka i Robotyka Systemy czasu rzeczywistego Wykład 4.
Programowanie obiektowe – zastosowanie języka Java SE
JAVA.
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Seminarium problemowe
INTERFEJSY I KLASY WEWNĘTRZNE
Co jeszcze mógłby wymyślić Einstein gdyby znał applety Javy? Dolnośląski Festiwal Nauki i Techniki Wrocław 2005.
Java 3 MPDI Programowanie obiektowe W5. Java - obiektowy język programowania stworzony przez firmę Sun Microsystems. Java jest językiem tworzenia programów.
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
  ELEMENTY JĘZYKA JAVA komentarze w Javie, słowa kluczowe i operatory, proste typy danych, tablice, podstawowy zestaw instrukcji.
Programowanie sieciowe w Javie
OCPJP Inner classes.
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
PROGRAMOWANIE W JAVA Informatyka Stosowana – ROK II / III Laboratoria mgr inż. Krzysztof Bzowski.
Programowanie sieciowe w Javie Michał Kuciapski
Zakres Wzorce projektowe ( -Adapter (str , wykład wzorce projektowe.
Model współbieżności w Javie autor: Grzegorz Szuba.
Model współbieżności w Javie
Uniwersytet Łódzki Wydział Matematyki i Informatyki, Katedra Analizy Nieliniowej Programowanie wielowątkowe w Javie Wykład 9 mgr inż. Michał Misiak.
Programowanie sieciowe w Javie Michał Kuciapski
Biblioteki graficzne: Swing, AWT, SWT
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Wątki, programowanie współbieżne
(według:
(c) Krzysztof Barteczko 2014
Klasy wewnętrzne. Praktyka użycia interfejsów i klas wewnętrznych
Programowanie obiektowe – zastosowanie języka Java SE
PGO Interfejsy Michail Mokkas.
Zastosowanie tzw reaktywności w aplikacjach.
Tworzenie wątków w Javie
Zapis prezentacji:

Nguyen Hung Son Uniwersytet Warszawski Java applet (c.d.) Nguyen Hung Son Uniwersytet Warszawski

Tematy Wielowątkowość Animacja Zasada pracy w sieci Klasa URL Praca z plikami przez sieć

Wielowątkowość Multithreading: to możliwość jednoczesnego uruchamiania oddzielnych modułów programu oraz ich dalszego równoległego działania Na komputerach jednoprocesorowych wykonanie programów wielowątkowych jest tylko emulowane, t.j. naprzemienne przydzielanie czasu procesora poszczególnym wątkom wg. pewnego algorytmu (zaimplementowanego w systemie operacyjnym). To, w jakim stopniu wątek będzie mógł wykorzystywać procesor, zależy od priorytetu wątku.

Wielowątkowość Program wielowątkowy definiujemy na dwa sposoby: jako podklasę klasy Thread; implementując interfejs Runnable. Wszystkie zadania, jakie ma wykonywać wątek umieszczone są w metodzie run() wątku. Po utworzeniu i inicjalizacji wątku, środowisko przetwarzania wywołuje metodę run. Metoda run() często zawiera pętlę. Na przykład, w wątku odpowiedzialnym za animację, pętla w metodzie run może wyświetlać serię obrazków. Niekiedy metoda run wątku wykonuje operacje, które zajmują dużo czasu np. ładowanie i odgrywanie dźwięków lub filmów.

Przykład 1- dziedziczenie klasy Thread class Watek extends Thread { String wciecie = ""; public Watek(String str, int numer) { super(str); for (int i = 1; i < numer; i++) wciecie = wciecie + ” ”; } public void run() { for (int i = 0; i < 4; i++) { System.out.println(wciecie + i + ”. " + getName()); try { sleep( (int)(Math.random() * 1000) ); } catch ( InterruptedException e ) { e.printStackTrace(); System.out.println(wciecie + getName()+ " koniec" );

Przykład 1 class ProgramWielowatkowy { public static void main (String[] args) throws Exception new Watek("Janek",1).start(); new Watek("Magda",2).start(); new Watek("Wacek",3).start(); new Watek("Ola",4).start(); pauza(); } static void pauza() throws Exception{}

Przykład 2 - implementuje Runable Definicja interfejsu Runnable : public interface java.lang.Runnable { // Metody public abstract void run(); } Przykład klasy implementującej interfejs Runnable: class MojaKlasa extends Applet implements Runnable { public void run() //ciało metody run //... inne metody klasy MojaKlasa

Przykład 2 class WatekPodstawowy implements Runnable { String wysun = ""; Thread biezacy; public WatekPodstawowy( int numer) { biezacy = Thread.currentThread(); for (int i = 1; i < numer; i++) wysun = wysun + "\t"; } public void run() { for (int i = 0; i < 4; i++) { System.out.println(wysun + i + " " + biezacy.getName()); try { biezacy.sleep((int)(Math.random() * 1000)); } catch (InterruptedException e) {} System.out.println(wysun + biezacy.getName()+ " koniec" );

Przykład 2 public class DrugiWielowatkowy { // tylko do pól statycznych klasy możemy się odwołać w // statycznej metodzie main() static Thread watki[]; public static void main (String[] args) throws Exception watki = new Thread[4]; watki[0] = new Thread( new WatekPodstawowy(1),"Janek"); watki[1] = new Thread( new WatekPodstawowy(2),"Magda"); watki[2] = new Thread( new WatekPodstawowy(3),"Wacek"); watki[3] = new Thread( new WatekPodstawowy(4),"Ola"); // uruchomienie wątków for (int i=0; i<4; i++) watki[i].start(); pauza(); } static void pauza() throws Exception {}

Stany wątku W czasie swego istnienia wątek może znajdować się w jednym z kilku stanów: nowy wątek wykonywany nie wykonywany zakończony Metoda isAlive: true, gdy wątek został uruchomiony a nie został jeszcze zakończony.

Efekty specjalne Aby ożywić applet, możemy dołączyć następujące efekty: dźwiękowy wizyjny animacyjny

Szablon apleta z animacją class Aplet_Animacja extends Applet implements Runnable { Thread animator; public void init() { animator = new Thread(this); } public void start() { if (animator.isAlive()) animator.resume(); else animator.start(); public void stop() { animator.suspend(); public void destroy() { animator.stop(); } public void run() { while (true) { repaint(); Thread.sleep(500); // czekaj chwilę do nast. ramki public void paint(Graphics g) { //narysuj aktualną ramkę

Przykład apletu import java.awt.*; import java.applet.*; public class film extends Applet implements Runnable {     /*  deklaracja zmiennych  programu  */     Thread   animacja;         /* wątek programu */     int     stan;              /* stan wykonywanego programu */       Color kolor_planszy;  /* kolor planszy */     int     nr_kadru;          /* nr wyświetlanego kadru */     int     nr_filmu;          /* nr wyświetlanej animacji */        int     szybkosc;          /* szybkość animacji */     /* obrazki animacji 1 */     Image    A_kadr1, A_kadr2;   /* obrazki animacji 2 */     Image    B_kadr1,   B_kadr2,  B_kadr3,  B_kadr4; /* melodyjki odtwarzane w czasie aminacji */     AudioClip muzyka1; AudioClip muzyka2;     boolean   brak_muzyki;     /* parametry tekstu */         Font font=new java.awt.Font("TimesRoman",Font.PLAIN,15);

Init public void init() { /* inicjacja zmiennych programu  */                  kolor_planszy=Color.blue;          stan=0;          nr_kadru=1;         nr_filmu=1;          animacja=null;  brak_muzyki=true; /* określenie parametru uruchomienia programu */          String atrybut=getParameter("szybkosc_animacji");          if (atrybut==null) szybkosc=500;          else           szybkosc=(Integer.valueOf(atrybut).intValue(); /* pliki graficzne umieszczamy w bieżącym katalogu */          A_kadr1=getImage(getCodeBase(),"./A_kadr1.gif");          A_kadr2=getImage(getCodeBase(),"./A_kadr2.gif");          B_kadr1=getImage(getCodeBase(),"./B_kadr1.gif");          B_kadr2=getImage(getCodeBase(),"./B_kadr2.gif");          B_kadr3=getImage(getCodeBase(),"./B_kadr3.gif");          B_kadr4=getImage(getCodeBase(),"./B_kadr4.gif");  /* pliki muzyczne umieszczamy w bieżącym katalogu */          muzyka1=getAudioClip(getDocumentBase(),"./muzyka.au");          muzyka2=getAudioClip(getDocumentBase(),"./ach.au"); /* określa rozmiar pola wyświetlanego programu   */          resize(310,90); }

Sterowanie dźwiękiem i animacji /* ustawienie scieżki dźwiękowej */ public void dzwiek()  {    if (brak_muzyki==true)    {           if (nr_filmu==1)                muzyka1.loop();             else                muzyka2.loop();             brak_muzyki=false;    }  }      /* aktualizacja strony graficznej programu  */ public void update(Graphics g) {    if (nr_filmu==1) {   /* wyświetla pierwszą animacje  */ switch (nr_kadru) {     case 1: g.drawImage(A_kadr1,50,30,this);               nr_kadru=2;               break;       case 2: g.drawImage(A_kadr2,50,30,this);         nr_kadru=1;                break;                    } }   else { /*wyświetla drugą aminacje*/ switch (nr_kadru){     case 1: g.drawImage(B_kadr1,50,30,this);          nr_kadru=2;          break;      case 2: g.drawImage(B_kadr2,50,30,this);          nr_kadru=3;          break;      case 3: g.drawImage(B_kadr3,50,30,this);          nr_kadru=4;          break;      case 4: g.drawImage(B_kadr4,50,30,this);          nr_kadru=1;          break;    }   }   paint(g); }

Obsługa apletu public void paint(Graphics g) { /* rysuje planszę */    if (stan==0)  {       g.setColor(kolor_planszy);       g.fillRect(10,10,300,80);        g.setColor(Color.green);        g.fillRect(150,30,145,30);        g.setColor(Color.black);        g.setFont(font);        g.drawString("ZMIANA ANIMACJI",160,50);              stan=1;     } } /* w momencie wciśnięcia przycisku myszki na odpowiednim polu ekranu następuje zmiana wyświetlanej animacji i odtwarzanej muzyki */ public boolean mouseDown(Event evt, int xx, int yy){     if (xx>150&&xx<295&&yy>30&&yy<60)    {             if (nr_filmu==1)  {                nr_filmu=2;                muzyka1.stop();             }             else {                nr_filmu=1;                muzyka2.stop();             }             brak_muzyki=true;     }     repaint();     return true;  }      public void start()     {          animacja=new Thread(this);          animacja.start();     }       public void stop()      {          animacja.stop();          if (muzyka1!=null)  { muzyka1.stop();  }          if (muzyka2!=null)  { muzyka2.stop();  }      }     public void run()      {         while(true)          {               try {   Thread.currentThread().sleep(szybkosc);   }catch (InterruptedException e ){}               dzwiek();               /* aktualizacja grafiki */              repaint();           }      }             }

Zasada pracy w sieci Koncepcja klient/serwer: serwer dostarcza naszemu programowi klienta potrzebnych danych: np. pliki, gdy łączymy się z serwerem FTP, poczta elektroniczna przysłana do nas (serwer POP), strony WWW (serwer HTTP), możemy także wysłać dane do serwera: np. połączenie z serwerem SMTP pozwala nam na wysłanie poczty elektronicznej Aby skorzystać z tych usług na nasz komputer musi obsługiwać protokoły TCP i UDP.

Zasada pracy w sieci (c.d.) W Javie czasami korzystamy z możliwości sieciowych bez implementacji ich: drugi walor tego języka pakiet java.net dostarcza możliwości sieciowe Ważniejsze klasy w tym pakiecie: URL: URLConection Socket oraz ServerSocket DatagramPacket oraz DatagramSocket ...

Klasa URL getProtocol() getHost() getFile() getPort() Reprezentuje adres URL(Uniform Resource Locator) Obiekty klasy URL posiadają: protokół, host, nazwa pliku, port komunikacji. Dostęp do tych właściwości jest możliwy poprzez: getProtocol() getHost() getFile() getPort()

Klasa URL URL ma 4 konstruktory: URL(String, String, int, String) tworzący obiekt URL na podstawie wyspecyfikowanego, odpowiednio: protokołu, nazwy hosta, numeru portu i pliku, URL(String, String, String) tworzący obiekt URL na podstawie wyspecyfikowanego, odpowiednio: protokołu, nazwy hosta i pliku, URL(String) tworzący obiekt URL dla adresu reprezentowanego w postaci łańcucha znakowego, URL(URL, String) tworzący obiekt URL na podstawie bazowego adresu URL (obiekt typu URL) i relatywnego adresu URL.

Klasa URL - Przykład Prosty sposób: URL mojAdres = new URL(“http://alfa.mimuw.edu.pl/~son/index.htm”); Można też: URL mojProvider = new URL(“http://alfa.mimuw.edu.pl”); URL mojAdres = new URL(mojProvider, “/~son/index.htm”); Można stworzyć obiekt URL odnoszący się do wybranego miejsca na stronie HTML (anchor): URL koniecMojejStrony = new URL(mojaStrona, "#KONIEC_STRONY"); Można sprecyzować port połączeń URL mojaStrona = new URL("http","alfa.mimuw.edu.pl",80,"/~son/index.htm");

Akcje związane z obiektami URL Wyświelanie strony z podanym URL za pomocą przeglądarki Internetowej Otwieranie połączenia do danego adresu, dzięki któremu możemy czytać i zapisywać dane !!! Utworzenie kanału komunikacyjnego w aplikacjach typu klient - serwer. ...

Wyświetlanie strony z Appletu public boolean action(Event e, Object arg) { .... try{ URL mojAdres = new URL(http://alfa.mimuw.edu.pl/~son/index.htm); getAppletContext().showDocument(mojAdres,"_self"); } catch (Exception exc){ exc.printStackTrace(); txtCo.setText("Zly adres"); ...

Wyświetlanie strony z Appletu Metoda getAppletContext() zwraca obiekt typu AppletContext umożliwiający dostęp do przeglądarki, w której uruchamiany jest applet. Obiekt typu AppletContext mają metodę showDocument(URL url, String target) parametry metody showDocument "_self" wyświetla dokument w bieżącym oknie "_parent" wyświetla w bieżącej ramce (ang. frame) "_top" wyświetla w szczytowej ramce "_blank" wyświetla w nowym oknie bez nazwy name wyświetla w nowym oknie o nazwie: name

Połączenie ze stroną metoda openConection() zwraca referencję do obiektu typu URLConnection, dzięki któremu możemy czytać i zapisywać dane, z utworzonego połączenia. Np. URLConnection polaczenie = mojAdres.openConnection(); można utworzyć strumień dla danego połączenia: getInputStream public InputStream getInputStream() throws IOException getOutputStream public OutputStream getOutputStream() throws IOException wyjątki się pojawiają wtedy, gdy serwer nie obsługuje operacji wejściowych lub wyjściowych.

Przykład popierania danych import java.net.*; import java.io.*; class TestPolaczenia { public static void main(String[] args) { try { URL mojURL = new URL("http://alfa.mimuw.edu.pl/~son/"); URLConnection polaczenie = mojURL.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(polaczenieDoFriko.getInputStream())); String inputLine; while ((inputLine = br.readLine()) != null) { System.out.println(inputLine); } br.close(); } catch (MalformedURLException me) {System.out.println("MalformedURLException: " + me);} catch (IOException ioe) {System.out.println("IOException: " + ioe);}