Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


Prezentacja na temat: "Java applet (c.d.) Nguyen Hung Son Uniwersytet Warszawski."— Zapis prezentacji:

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

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

3 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.

4 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.

5 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" ); }

6 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{} }

7 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 }

8 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" ); }

9 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{} }

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

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

12 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ę }

13 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);

14 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); }

15 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); }

16 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 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(); } } }

17 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.

18 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...

19 Klasa URL 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()

20 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.

21 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");

22 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....

23 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"); }... }

24 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

25 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. N p. URLConnection polaczenie = mojAdres. openConnection() ; można utworzyć strumień dla danego połączenia: getInputStream public InputStream getInputStream() throws IOExceptionInputStreamIOException getOutputStream public OutputStream getOutputStream() throws IOExceptionOutputStreamIOException wyjątki się pojawiają wtedy, gdy serwer nie obsługuje operacji wejściowych lub wyjściowych.

26 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);} }


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

Podobne prezentacje


Reklamy Google