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

Java applet (c.d.)

  • Upload
    jared

  • View
    50

  • Download
    0

Embed Size (px)

DESCRIPTION

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 : - PowerPoint PPT Presentation

Citation preview

Page 1: Java applet (c.d.)

Java applet (c.d.)

Nguyen Hung Son

Uniwersytet Warszawski

Page 2: Java applet (c.d.)

Tematy

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

Page 3: Java applet (c.d.)

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.

Page 4: Java applet (c.d.)

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.

Page 5: Java applet (c.d.)

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

}}

Page 6: Java applet (c.d.)

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

Page 7: Java applet (c.d.)

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

}

Page 8: Java applet (c.d.)

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

}

Page 9: Java applet (c.d.)

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ówfor (int i=0; i<4; i++)

watki[i].start();pauza();

}static void pauza() throws Exception {}

}

Page 10: Java applet (c.d.)

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:

Page 11: Java applet (c.d.)

Efekty specjalne

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

Page 12: Java applet (c.d.)

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

}

Page 13: Java applet (c.d.)

Przykład apletuimport 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);

Page 14: Java applet (c.d.)

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

Page 15: Java applet (c.d.)

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

}

Page 16: Java applet (c.d.)

Obsługa apletupublic 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();          }     }             }

Page 17: Java applet (c.d.)

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.

Page 18: Java applet (c.d.)

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

Page 19: Java applet (c.d.)

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()

Page 20: Java applet (c.d.)

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.

Page 21: Java applet (c.d.)

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

Page 22: Java applet (c.d.)

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.

...

Page 23: Java applet (c.d.)

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

}...

}

Page 24: Java applet (c.d.)

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

Page 25: Java applet (c.d.)

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.

Page 26: Java applet (c.d.)

Przykład popierania danychimport 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);}

}}