Java applet (c.d.) - PowerPoint PPT Presentation

About This Presentation
Title:

Java applet (c.d.)

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 ... – PowerPoint PPT presentation

Number of Views:100
Avg rating:3.0/5.0
Slides: 27
Provided by: son167
Category:

less

Transcript and Presenter's Notes

Title: Java applet (c.d.)


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

2
Tematy
  • Wielowatkowosc
  • Animacja
  • Zasada pracy w sieci
  • Klasa URL
  • Praca z plikami przez siec

3
Wielowatkowosc
  • Multithreading
  • to mozliwosc jednoczesnego uruchamiania
    oddzielnych modulów programu oraz ich dalszego
    równoleglego dzialania
  • Na komputerach jednoprocesorowych wykonanie
    programów wielowatkowych jest tylko emulowane,
    t.j. naprzemienne przydzielanie czasu procesora
    poszczególnym watkom wg. pewnego algorytmu
    (zaimplementowanego w systemie operacyjnym).
  • To, w jakim stopniu watek bedzie mógl
    wykorzystywac procesor, zalezy od priorytetu
    watku.

4
Wielowatkowosc
  • Program wielowatkowy definiujemy na dwa sposoby
  • jako podklase klasy Thread
  • implementujac interfejs Runnable.
  • Wszystkie zadania, jakie ma wykonywac watek
    umieszczone sa w metodzie run() watku.
  • Po utworzeniu i inicjalizacji watku, srodowisko
    przetwarzania wywoluje metode run.
  • Metoda run() czesto zawiera petle. Na przyklad,
  • w watku odpowiedzialnym za animacje, petla w
    metodzie run moze wyswietlac serie obrazków.
  • Niekiedy metoda run watku wykonuje operacje,
    które zajmuja duzo czasu np. ladowanie i
    odgrywanie dzwieków lub filmów.

5
Przyklad 1- dziedziczenie klasy Thread
  • class Watek extends Thread
  • String wciecie ""
  • public Watek(String str, int numer)
  • super(str)
  • for (int i 1 i lt numer i) wciecie
    wciecie
  • public void run()
  • for (int i 0 i lt 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
Przyklad 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
Przyklad 2 - implementuje Runable
  • Definicja interfejsu Runnable
  • public interface java.lang.Runnable
  • // Metody
  • public abstract void run()
  • Przyklad klasy implementujacej interfejs
    Runnable
  • class MojaKlasa extends Applet implements
    Runnable
  • public void run()
  • //cialo metody run
  • //... inne metody klasy MojaKlasa

8
Przyklad 2
  • class WatekPodstawowy implements Runnable
  • String wysun ""
  • Thread biezacy
  • public WatekPodstawowy( int numer)
  • biezacy Thread.currentThread()
  • for (int i 1 i lt numer i) wysun wysun
    "\t"
  • public void run()
  • for (int i 0 i lt 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
Przyklad 2
  • public class DrugiWielowatkowy
  • // tylko do pól statycznych klasy mozemy sie
    odwolac w
  • // statycznej metodzie main()
  • static Thread watki
  • public static void main (String args) throws
    Exception
  • watki new Thread4
  • watki0 new Thread( new WatekPodstawowy(1),"
    Janek")
  • watki1 new Thread( new WatekPodstawowy(2),"
    Magda")
  • watki2 new Thread( new WatekPodstawowy(3),"
    Wacek")
  • watki3 new Thread( new WatekPodstawowy(4),"
    Ola")
  • // uruchomienie watków
  • for (int i0 ilt4 i)
  • watkii.start()
  • pauza()
  • static void pauza() throws Exception

10
Stany watku
W czasie swego istnienia watek moze znajdowac sie
w jednym z kilku stanów
  • nowy watek
  • wykonywany
  • nie wykonywany
  • zakonczony
  • Metoda isAlive true, gdy watek zostal
    uruchomiony a nie zostal jeszcze zakonczony.

11
Efekty specjalne
  • Aby ozywic applet, mozemy dolaczyc nastepujace
    efekty
  • dzwiekowy
  • wizyjny
  • animacyjny

12
Szablon apleta z animacja
  • 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
chwile do nast. ramki public void
paint(Graphics g) //narysuj aktualna
ramke
13
Przyklad apletu
  • import java.awt.import java.applet.public
    class film extends Applet
  • implements Runnable     /  deklaracja
    zmiennych  programu  /    Thread  
    animacja         / watek programu /   
    int     stan              / stan wykonywanego
    programu /       Color kolor_planszy  /
    kolor planszy /    int     nr_kadru          /
    nr wyswietlanego kadru /   
    int     nr_filmu          / nr wyswietlanej
    animacji /        int     szybkosc          /
    szybkosc 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 fontnew java.awt.Font("TimesRoma
    n",Font.PLAIN,15)

14
Init
  •     public void init() 
  • / inicjacja zmiennych programu  /        
             kolor_planszyColor.blue        
    stan0          nr_kadru1        
    nr_filmu1         animacjanull 
    brak_muzykitrue/ okreslenie parametru
    uruchomienia programu /         String
    atrybutgetParameter("szybkosc_animacji")       
      if (atrybutnull) szybkosc500        
    else           szybkosc(Integer.valueOf(
    atrybut).intValue()/ pliki graficzne
    umieszczamy w biezacym katalogu /        
    A_kadr1getImage(getCodeBase(),"./A_kadr1.gif") 
            A_kadr2getImage(getCodeBase(),"./A_kadr2.
    gif")         B_kadr1getImage(getCodeBase(),"./
    B_kadr1.gif")         B_kadr2getImage(getCodeBa
    se(),"./B_kadr2.gif")        
    B_kadr3getImage(getCodeBase(),"./B_kadr3.gif") 
            B_kadr4getImage(getCodeBase(),"./B_kadr4.
    gif")  / pliki muzyczne umieszczamy w biezacym
    katalogu /         muzyka1getAudioClip(getDocum
    entBase(),"./muzyka.au")        
    muzyka2getAudioClip(getDocumentBase(),"./ach.au")
    / okresla rozmiar pola wyswietlanego
    programu   /         resize(310,90)

15
Sterowanie dzwiekiem i animacji
  • / ustawienie sciezki dzwiekowej /public void
    dzwiek()     if (brak_muzykitrue)  
              if (nr_filmu1)              
    muzyka1.loop()            else              
    muzyka2.loop()            brak_muzykifalse  
     
  •       / aktualizacja strony graficznej
    programu  /
  • public void update(Graphics g)   if
    (nr_filmu1)   / wyswietla pierwsza
    animacje  /
  • switch (nr_kadru)     case 1
    g.drawImage(A_kadr1,50,30,this)             
    nr_kadru2              break      case 2
    g.drawImage(A_kadr2,50,30,this)        
    nr_kadru1               break               
  •    

  else /wyswietla druga aminacje/ switch
(nr_kadru)    case 1 g.drawImage(B_kadr1,
50,30,this)         nr_kadru2         break
     case 2 g.drawImage(B_kadr2,50,30,this)
         nr_kadru3         break     case
3 g.drawImage(B_kadr3,50,30,this)         n
r_kadru4         break     case
4 g.drawImage(B_kadr4,50,30,this)         n
r_kadru1         break       paint(g)

16
Obsluga apletu
  • public void paint(Graphics g)   
  • / rysuje plansze /    if (stan0)       
    g.setColor(kolor_planszy)      
    g.fillRect(10,10,300,80)       g.setColor(Col
    or.green)       g.fillRect(150,30,145,30)    
       g.setColor(Color.black)       g.setFont(fon
    t)        g.drawString("ZMIANA
    ANIMACJI",160,50)              stan1   
    / w momencie wcisniecia przycisku myszki na
    odpowiednim polu ekranu nastepuje zmiana
    wyswietlanej animacji i odtwarzanej muzyki
    /public boolean mouseDown(Event evt, int xx,
    int yy)    if (xxgt150xxlt295yygt30yylt60)   
                if (nr_filmu1)                
    nr_filmu2               muzyka1.stop()       
                     else               
    nr_filmu1               muzyka2.stop()       
                     brak_muzykitrue       
    repaint()    return true   

    public void start()             
animacjanew 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 laczymy sie z serwerem FTP,
  • poczta elektroniczna przyslana do nas (serwer
    POP),
  • strony WWW (serwer HTTP),
  • mozemy takze wyslac dane do serwera
  • np. polaczenie z serwerem SMTP pozwala nam na
    wyslanie poczty elektronicznej
  • Aby skorzystac z tych uslug na nasz komputer musi
    obslugiwac protokoly TCP i UDP.

18
Zasada pracy w sieci (c.d.)
  • W Javie czasami korzystamy z mozliwosci
    sieciowych bez implementacji ich drugi walor
    tego jezyka
  • pakiet java.net dostarcza mozliwosci sieciowe
  • Wazniejsze klasy w tym pakiecie
  • URL
  • URLConection
  • Socket oraz ServerSocket
  • DatagramPacket oraz DatagramSocket
  • ...

19
Klasa URL
  • Reprezentuje adres URL(Uniform Resource Locator)
  • Obiekty klasy URL posiadaja protokól, host,
    nazwa pliku, port komunikacji. Dostep do tych
    wlasciwosci jest mozliwy poprzez
  • getProtocol()
  • getHost()
  • getFile()
  • getPort()

20
Klasa URL
  • URL ma 4 konstruktory
  • URL(String, String, int, String) tworzacy obiekt
    URL na podstawie wyspecyfikowanego, odpowiednio
    protokolu, nazwy hosta, numeru portu i pliku,
  • URL(String, String, String) tworzacy obiekt URL
    na podstawie wyspecyfikowanego, odpowiednio
    protokolu, nazwy hosta i pliku,
  • URL(String) tworzacy obiekt URL dla adresu
    reprezentowanego w postaci lancucha znakowego,
  • URL(URL, String) tworzacy obiekt URL na
    podstawie bazowego adresu URL (obiekt typu URL) i
    relatywnego adresu URL.

21
Klasa URL - Przyklad
  • Prosty sposób
  • URL mojAdres new URL(http//alfa.mimuw.edu.pl/
    son/index.htm)
  • Mozna tez
  • URL mojProvider new URL(http//alfa.mimuw.edu.
    pl)
  • URL mojAdres new URL(mojProvider,
    /son/index.htm)
  • Mozna stworzyc obiekt URL odnoszacy sie do
    wybranego miejsca na stronie HTML (anchor)
  • URL koniecMojejStrony new URL(mojaStrona,
    "KONIEC_STRONY")
  • Mozna sprecyzowac port polaczen
  • URL mojaStrona new URL("http","alfa.mimuw.edu.p
    l",80,"/son/index.htm")

22
Akcje zwiazane z obiektami URL
  • Wyswielanie strony z podanym URL za pomoca
    przegladarki Internetowej
  • Otwieranie polaczenia do danego adresu, dzieki
    któremu mozemy czytac i zapisywac dane !!!
  • Utworzenie kanalu komunikacyjnego w aplikacjach
    typu klient - serwer.
  • ...

23
Wyswietlanie 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
Wyswietlanie strony z Appletu
  • Metoda getAppletContext() zwraca obiekt typu
    AppletContext umozliwiajacy dostep do
    przegladarki, w której uruchamiany jest applet.
  • Obiekt typu AppletContext maja metode
    showDocument(URL url, String target)
  • parametry metody showDocument
  • "_self" wyswietla dokument w biezacym oknie
  • "_parent" wyswietla w biezacej ramce (ang.
    frame)
  • "_top" wyswietla w szczytowej ramce
  • "_blank" wyswietla w nowym oknie bez nazwy
  • name wyswietla w nowym oknie o nazwie name

25
Polaczenie ze strona
  • metoda openConection() zwraca referencje do
    obiektu typu URLConnection, dzieki któremu mozemy
    czytac i zapisywac dane, z utworzonego
    polaczenia. Np.URLConnection polaczenie
    mojAdres.openConnection()
  • mozna utworzyc strumien dla danego polaczenia
  • getInputStream
  • public InputStream getInputStream() throws
    IOException
  • getOutputStream
  • public OutputStream getOutputStream() throws
    IOException
  • wyjatki sie pojawiaja wtedy, gdy serwer nie
    obsluguje operacji wejsciowych lub wyjsciowych.

26
Przyklad 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.openConnectio
    n()
  • BufferedReader br new BufferedReader(new
  • InputStreamReader(polaczenieDoFriko.getInputSt
    ream()))
  • 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)
Write a Comment
User Comments (0)
About PowerShow.com