270 likes | 466 Views
Programowanie sieciowe w Javie. Michał Kuciapski m.kuciapski@univ.gda.pl. Metody sieciowe apletów. Metody sieciowe apletów. Klasy tworzenia apletu. Wykorzystywane klasy. Aby utworzyć aplet należy dziedziczyć po jednej z klas: java.applet.Applet javax.swing.JApplet
E N D
Programowanie sieciowe w Javie Michał Kuciapski m.kuciapski@univ.gda.pl
Metody sieciowe apletów Klasy tworzenia apletu
Wykorzystywane klasy • Aby utworzyć aplet należy dziedziczyć po jednej z klas: • java.applet.Applet • javax.swing.JApplet • Do tworzenia interfejsu graficznego używamy odpowiednio: • java.awt.* - w przypadku tworzenia apletu jako Applet • javax.swing.* - w przypadku tworzenia apletu jako • JApplet
Metody sieciowe apletów Cykl życia apletu
Etapy cyklu życia • Cykl życia aplety składa się z kilku etapów: • public void init() • public void start() • public void stop() • public void destroy() • paint(Graphics g)
Przykład • import java.applet.Applet; import java.awt.Graphics; • public class CyklZyciaApletu extends Applet { • StringBuffer tekstApletu; • public void init() { • tekstApletu = new StringBuffer(); • dodajElement("inicjalizowanie... "); } • public void start() { • dodajElement("uruchamianie... "); } • public void stop() { • dodajElement("zatrzymanie... "); } • public void destroy() { • dodajElement("usuwanie..."); }
Przykład c.d. • private void dodajElement(String tekst) { • tekstApletu.append(tekst); • repaint(); • } • public void paint(Graphics g) { • g.drawOval(0,0,getWidth() - 10 , getHeight() - 10); • g.drawString(tekstApletu.toString(), getWidth()/4, getHeight()/2); • } • }
Metody sieciowe apletów Pobieranie danych lokalizacji apletu
Miejsca pobierania danych • Aplety pobierają najczęściej dane z: • Katalogu, z którego aplet pochodzi – baza kodowa • Katalogu strony HTML, w której aplet jest zagnieżdżony – baza dokumentowa • Do ustalanie baz kodowej i dokumentowej służą odpowiednio metody: • URLgetCodeBase()– adres URL katalogu • zawierającego aplet • URLgetDocumentBase() – adres URL strony • zawierającej aplet
Przykład 1 • import java.awt.Graphics; • import java.applet.Applet; • public class BazaApletu extends Applet • { • public void paint(Graphics g) • { • g.drawString("Baza kodowa apletu: " + this.getCodeBase() .toString(), 20, 30); • g.drawString("Baza dokumentowa apletu: " + this.getDocumentBase().toString(), 20, 50); • } • }
Przykład 2 • import javax.swing.*; • public class BazaApletuSwing extends JApplet { • public void init() • { • JLabel bazaKodowa = new JLabel(); • JLabel bazaDokumentowa = new JLabel(); • bazaKodowa.setText(this.getCodeBase().toString()); • bazaDokumentowa.setText(this.getDocumentBase().toString()); • getContentPane().setLayout(new BoxLayout(getContentPane(),BoxLayout.Y_AXIS)); • this.add(bazaKodowa); • this.add(bazaDokumentowa); • } • }
Metody sieciowe apletów Pobieranie i przesyłanie danych
Zastosowania • Aplety w zakresie pobierania i przesyłania danych umożliwiają m.in.: • Ładowanie obrazków • Ładowanie dźwięków • Wyświetlanie dokumentów • Przesyłanie danych pomiędzy sobą
Ładowanie obrazków • Ładowanie obrazków możliwe jest poprzez metody klasy Image : • Image getImage(URL url) • Image getImage(URL url, String nazwa) • Metody te są dostępne poprzez: • Klasę Applet • Klasę java.awt.Toolkit – dzięki metodzie statycznej getDefaultToolkit()
Przykład • import java.awt.*; • import java.applet.*; • import java.net.*; • public class PobieranieObrazkow extends Applet { • Image obrazek1; Image obrazek2; • public void init() • { • try • { • URL adres = new URL(this.getCodeBase(), • this.getParameter("Obrazek1")); • this.obrazek1 = this.getImage(adres);
Przykład c.d. • Toolkit tk = java.awt.Toolkit.getDefaultToolkit(); • adres = new URL(this.getCodeBase(), this.getParameter("Obrazek2")); • obrazek2 = tk.getImage(adres); • } • catch(MalformedURLException e){} • } • public void paint(Graphics g) • { • g.drawImage(obrazek1,0,0,this); • // int szerokosc = obrazek1.getWidth(this); • g.drawString("I jego najlepszy kumpel ;-)",50,180); • g.drawImage(obrazek2,0,200,this); • } • }
Ładowanie dźwięku • Ładowanie dźwięku możliwe jest porzez intefejs AudioClip pakietu Applet. • Obsługiwanym przez Java API formatem począwszy od wersji 1.2 są: AIFF, AU (jednokanałowy, 8 bitowy, µlaw, 8000 Hz), WAV, MIDI (typ 0 i typ 1), RMF. • Narzędziem umożliwiającym konwersję różnych formatów na ten format jest audiotool.
Ładowanie dźwięku - metody • Utworzenie obiektu umożliwiającego odtwarzanie dźwięku dokonywane jest poprzez dwie metody: • AudioClip getAudioClip(URL adres) • AudioClip getAudioClip(URL adres, String nazwa) • Interfejs AudioClip zawiera metody: • void loop() • play: • void play(URL adres) • void play(URL adres, String nazwa) • voidstop()
Przykład • AudioClip dzwiek = this.getAudioClip(this.getCodeBase(),"Aplety/muzyka.au"); • public void start() { • if(loop == false) • { • dzwiek.loop(); • loop = true; • }} • public void stop() { • if(loop) • { • dzwiek.stop(); • loop = false; • }}
Wyświetlanie dokumentów • Za pomocą klasy AppletContext możliwe jest wyświetlanie dolumentów HTML w okienie przęgladarki. Służą do tego dwie metody: • public void showDocument(URL adres) • public void showDocument(URL adres, String doceloweOkno) • Parametr doceloweOkno może mieć wartości: • "_blank" • "nazwaOkna" • "_self" • "_parent" • "_top"
Wyświetlanie dokumentów - przykład • AppletContext kontekst = this.getAppletContext(); • String typOkna; • if (jcbOkno.getSelectedItem().toString().equalsIgnoreCase("Nowe Okno")) • typOkna = "_blank"; • else • typOkna = "_self"; • try{ • URL sciezka = new URL(this.getCodeBase() + "Aplety/dokumenty/" • + jcbDokumenty.getSelectedItem().toString()); • System.out.println(this.getCodeBase() + "Aplety/dokumenty/" + • jcbDokumenty.getSelectedItem().toString()); • System.out.println(typOkna); • kontekst.showDocument(sciezka, typOkna); • } • catch(MalformedURLException e) {}
Przesyłanie danych pomiędzy apletami • Z przesyłaniem danych pomiędzy apletami wiążą się następujące restrykcje.: • Wiele przeglądarek wymaga, aby aplety pochodziły z tego samego serwera • Wiele przeglądarek wymaga, aby aplety miały tą samą bazę kodową • Java API wymaga, aby aplety były uruchomione na tej samej stronie w tym samym oknie przeglądarki
Przesyłanie danych pomiędzy apletami • Znajdowanie apleta opiera się o sprawdzenie jego nazwy przy wykorzystaniu metody getApplet klasy AppletContext. • Znalezienie apletu poprzez pobranie adresu jego obiektu jest jednoznaczne z możliwością wywoływania jego metod. • Nazwę apletu podajemu w tagu <APPLET> jako atrybut NAME • <APPLET codebase="classes" code="Aplety/PobieranieObrazkow.class" width=300 height=470 name="pobieranieObrazkow" >
Przesyłanie danych pomiędzy apletami - przykład • this.showStatus("Zostaly przeslane dane!!!"); • Applet aplet = getAppletContext().getApplet("odbiorca"); • ((ApletPrzesylanieOdbiorca)aplet).ustawPrzeslaneDane(jtaDane.getText()); • public void ustawPrzeslaneDane(String tekst) • { • jtaDane.setSelectedTextColor(java.awt.Color.RED); • jtaDane.setText(tekst); • Applet aplet = getAppletContext().getApplet("nadawca"); • ((ApletPrzesylanieNadawca)aplet).ustawPrzeslaneDane("DZIĘKI ZA PRZESŁANIE DANYCH!!!"); • }
Aplety wielowątkowe • W związku z tym, że dla utworzenia apletu konieczne jest dziedziczenia po klasie Applet lub JApplet dla pisania apletów wielowątkowych wykorzystujemy interfejs Runnable. • public class ApletWielowatkowy extends Applet implements Runnable
Aplety wielowątkowe - przykład • Thread watek = new Thread(this); • watek.start(); • …. • public void run() { • while(true) { • try { • repaint(); • Thread.currentThread().sleep(5000); • dorysujTrzeci = true; • repaint(); • Thread.currentThread().sleep(5000); • dzwiek.play(); • } • catch(InterruptedException e){} }