Dione
Z. KotalaP. Toman: Java
Predchozi (Obsah) Dalsi

17. Applet

Applet je program v Javě, který pro svůj běh vyžaduje Java-kompatibilní prohlížeč. Nespouští se přímo (jako aplikace), nýbrž otevřením HTML dokumentu, kde je na něj umístěn odkaz pomocí speciální značky <APPLET> (viz 17.3.).

Z bezpečnostních důvodů platí pro applet některá omezení a naopak má applet některé funkce rozšířeny:

  • Applet nemůže nahrávat knihovny ani definovat nativní metody.

  • Applet nemůže navazovat síťové spojení na jiný než domovský server.

  • Applet nemůže zapisovat do souborů na straně klienta (prohlížeče).

  • Applet nemůže spouštět programy na domovském serveru.

  • Applet nemůže číst některé systémové proměnné. (1) .

  • Applet může přehrávat zvuky (viz 17.2.).

  • Applet může požádat browser o zobrazení libovolné WWW stránky (viz 17.2.).

  • Applet může volat veřejné metody appletů umístěných na téže WWW stránce (viz 17.3.1.).

Pozn.: Uvedená omezení se mohou v budoucnu zmírnit - po rozšíření autentifikačních a šifrovacích mechanismů, podrobnosti viz [WWW8].

Pozn.: Některé prohlížeče umožňují uvedená omezení nastavit individuálně pro vybrané applety. (2)

17.1. Struktura appletu

Základní strukturu appletu tvoří třída java.applet.Applet, která definuje základní metody tvořící rozhraní mezi prohlížečem a appletem. Program, který má fungovat jako applet, musí být potomkem této třídy.

Applet běží v grafickém kontextu, a jako takový je úzce spojen s "okenní" knihovnou AWT (viz příloha A.). Třída java.applet.Applet je potomkem třídy java.awt.Panel, která umožňuje appletu vlastnit komponenty uživatelského rozhraní, provádět grafický výstup a zachycovat události z klávesnice a myši.

Životní cyklus appletu závisí na prohlížeči, který během své činnosti volá tyto metody appletu:

  • public void init() - při inicializaci,

  • public void start() - při spuštění,

  • public void paint(java.awt.Graphics g) - při překreslování,

  • public void stop() - při zastavení,

  • public void destroy() - při ukončení.

Tyto metody jsou ve třídě java.applet.Applet definovány (3) jako prázdné a pro smysluplnou činnost je třeba v potomkovi překrýt alespoň jednu z nich. Kostra appletu, který implementuje všechny základní metody, vypadá takto:

 
public class NovyApplet extends java.applet.Applet {
    public void init() {
       // kód provedený při inicializaci
    }

    public void start() {
       // kód prováděný při spuštení
    }

    public void stop() {
       // kód prováděný při zastavení
    }

    public void destroy() {
       // kód prováděný při ukončení
    }

    public void paint(java.awt.Graphics g) {
       // kód prováděný při překreslování
    }
}

Následující obrázek znázorňuje volání metod appletu v závislosti na stavu prohlížeče:

cyklus.gif

Pozn.: Rozdíl mezi zastavením a zrušením spočívá v tom, že při zrušení appletu dochází navíc k ukončení jeho vláken a odstranění appletu z paměti. Při zastavení appletu mohou jeho vlákna pokračovat v činnosti.

Pozn.: U některých prohlížečů může po zastavení appletu docházet automaticky k jeho zrušení (po metodě stop() se bezprostředně volá metoda destroy()).

17.2. Třída java.applet.Applet

Kromě již zmíněných třída java.applet.Applet obsahuje metody: (4)

  • public boolean isActive() - vrací true, je-li applet aktivní, tzn. byl-li spuštěn metodou start() a nebyl zastaven metodou stop().

  • public URL getCodeBase() - vrací URL, na kterém se nachází kód appletu.

  • public URL getDocumentBase() - vrací URL dokumentu, kde je odkaz na applet.

  • public String getParameter(String jméno) - vrací hodnotu parametru zadaného jména. Pokud není příslušný parametr definován, vrací null.

  • public String[][] getParameterInfo() - může sloužit prohlížeči pro poskytnutí informací o parametrech, které applet používá. Metoda by měla vracet pole, jehož prvky jsou trojice řetězců ve významu: jméno, typ, popis (viz 17.3.). Metoda standardně vrací null.

  • public String getAppletInfo() - může sloužit k poskytnutí informací o programu, autorovi apod. Metoda standardně vrací null.

  • public Locale getLocale() - vrací objekt reprezentující geografická specifika.

  • public void resize(int výška, int šířka),
    public void resize(Dimension d) - změní velikost grafického výřezu appletu na zadané rozměry.

  • public void showStatus(String zpráva) - zobrazí zprávu ve stavovém poli prohlížeče (dolní pruh).

  • public Image getImage(URL url),
    public Image getImage(URL url, String jméno) - vrací referenci obrázek ve formátu GIF nebo JPEG. Parametry: url - absolutní adresa obrázku, jméno - relativní část adresy vůči url. Návrat z obou metod je proveden okamžitě, i když obrázek ještě není natažen ze sítě.

  • public void play(URL url), public void play(URL url, String jméno) - přehraje zvukový klip (formát .au) ze zadané adresy. Parametry jako getImage().

  • public AudioClip getAudioClip(URL url),
    public AudioClip getAudioClip(URL url, String jméno) - vrací referenci na zvukový klip - instanci implementující rozhraní java.applet.AudioClip, které poskytuje metody:

    • public void play() - přehraje klip,

    • public void loop() - spustí nekonečnou smyčku přehrávání klipu,

    • public void stop() - zastaví přehrávání klipu.

  • public AppletContext getAppletContext() - vrací referenci na kontext appletu - reprezentovanou instancí implementující rozhraní java.applet.AppletContext, které poskytuje metody:

    • public Applet getApplet(String jméno) - vrací referenci na applet zadaného jména (jméno appletu se zapisuje do HTML souboru, viz 17.3.). Není-li applet nalezen vrací null.

    • public Enumeration getApplets() - vrací seznam všech appletů ve stejném HTML dokumentu.

    • public void showDocument(URL url),
      public void showDocument(URL url, String okno) - požádá prohlížeč o zobrazení WWW stránky na zadaném url. Dokument bude zobrazen podle parametru okno:

      • _top - do nejsvrchnějšího okna prohlížeče,

      • _parent - do rodičovského okna,

      • _blank - do nového okna,

      • _self - do aktuálního okna (implicitní nastavení).

      public void showStatus(String zpráva) - viz výše.

17.3. Applet na WWW stránce

Před spuštěním appletu je třeba na něj umístit odkaz do HTML dokumentu tvořícího WWW stránku. To se děje pomocí speciální formátovací značky <APPLET>, která má obecně následující strukturu:


<APPLET
     CODE = " třída.class "
     WIDTH = " šířka "
     HEIGHT = " výška "

     [ NAME = " jménoInstanceAppletu "]
     [ CODEBASE = " url "]
     [ ARCHIVE = " JARsoubor1,  JARsoubor2, ...,  JARsouborN "]
     [ ALT = " alternativníText "]
     [ ALIGN = " zarovnávání "]
     [ HSPACE = " vodorovnéOdsazení "]
     [ VSPACE = " svisléOdsazení "] >

[ <PARAM NAME = " jméno1 " VALUE = " hodnota1 "> ]
[ <PARAM NAME = " jméno2 " VALUE = " hodnota2 "> ]
   ...
[ <PARAM NAME = " jménoN " VALUE = " hodnotaN "> ]

[ AlternativníHTML ]

</APPLET>

Značka <APPLET> je rozdělena na tyto základní části:

  • Atributy appletu - jsou uzavřeny v prvních ostrých závorkách.

  • Parametry appletu - každý parametr PARAM má jméno (NAME) a hodnotu (VALUE). Ke čtení parametrů slouží metody getParameter() a getParameterInfo().

  • AlternativníHTML - je HTML text pro prohlížeč, který nespouští programy v Javě.

Jednotlivé atributy značky <APPLET> mají tento význam:

  • CODE = třída.class - jméno .class souboru s bytovým kódem appletu - pokud se nenachází ve stejném adresáři jako HTML soubor, je nutné uvést položku CODEBASE.

  • WIDTH = šířka - udává šířku grafického výřezu (v pixelech) na WWW stránce, kam může applet zobrazovat.

  • HEIGHT = výška - udává výšku grafického výřezu (v pixelech) na WWW stránce, kam může applet zobrazovat.

  • NAME = jménoInstanceAppletu - udává jméno instance appletu, na který je pak možné odkazovat metodou getApplet() (viz 17.2.) - slouží pro komunikaci appletů (viz 17.3.1.).

  • CODEBASE = url - udává absolutní adresu (URL), kde se bude hledat třída appletu z atributu CODE nebo soubory z JAR archívů (viz dále).

  • ARCHIVE = JARsoubor1, JARsoubor2, ..., JARsouborN - specifikuje jeden nebo více komprimovaných souborů (5) , které se budou nahrávat při načtení HTML dokumentu. Pokud je tento atribut uveden, musí první uvedený JARsoubor1 obsahovat třídu appletu, tzn. nebere se v úvahu atribut CODE.

    K souborům z JAR archívů se z programu přistupuje jako by se nalézaly v adresáři relativně od CODEBASE.

    Atribut ARCHIVE je k dispozici od JDK 1.1 a zatím není prohlížeči příliš podporován.

  • ALT = alternativníText - obsahuje text, který prohlížeč zobrazí v případě, že rozeznává značku <APPLET>, ale nezobrazuje grafiku.

  • ALIGN = zarovnávání - určuje horizontální zarovnávání, může nabývat některé z hodnot (6) : left, right, top, texttop, middle, absmiddle, baseline, bottom, absbottom.

  • HSPACE = vodorovnéOdsazení - udává vodorovné odsazení grafického výřezu appletu na WWW stránce (v pixelech).

  • VSPACE = svisléOdsazení - udává svislé odsazení grafického výřezu appletu na WWW stránce (v pixelech).

17.3.1. Komunikace mezi applety

Applety na téže WWW stránce spolu mohou komunikovat pomocí volání svých veřejných metod. Applet, jehož veřejné metody lze volat musí mít uvedeno jméno (NAME) ve značce <APPLET> (viz 17.3.).

Priklad 17.1.
Následující výpis obsahuje dva applety (musí být uloženy do souborů Volajici.java a Volany.java), které demonstrují jednoduché předání textové zprávy.

import java.applet.Applet;

public class Volajici extends Applet {                      // (1)
   public void start() {
      Applet app = getAppletContext().getApplet("Volany");  // (2)
      ((Volany)app).prijmiZpravu("Funguje to!");            // (3)
   }
}

public class Volany extends Applet {                        // (4)
   String text = "Zatim nic...";

   public void prijmiZpravu(String text) {
      if (text != null)
         this.text = text;                                  // (5)
      repaint();                                            // (6)
   }

   public void paint(java.awt.Graphics g) {                 // ()
      g.drawString(text, 5,20);                             // ()
   }
}

Volající applet (1) nejprve získá referenci na applet jménem "Volany" (2) a zašle mu textovou zprávu (3). Volaný applet (4) zprávu přijme (5) a zobrazí - překreslení zajišťuje metoda paint() (7) volaná prohlížečem na žádost metody repaint().

HTML dokument bude obsahovat tyto údaje - důležitý je zejména atribut NAME u volaného appletu:

<APPLET
   CODE   = Volany.class
   WIDTH  = 100
   HEIGHT = 30
   NAME   = "Volany"
></APPLET>

<APPLET
   CODE   = Volajici.class
   WIDTH  = 0
   HEIGHT = 0
></APPLET>


  • (1) Ke čtení systémových proměnných slouží například metoda System.getProperty()
  • (2) Obvykle je však musí jednat o applet uložený v JAR souboru, který je opatřen digitálním podpisem - k tomu slouží programy javakey a jar, viz příloha D..
  • (3) Výjimkou je metoda paint(), kterou applet dědí od třídy java.awt.Panel.
  • (4) Uvedena není pouze metoda setStub(), kterou volá výhradně prohlížeč při inicializaci prostředí.
  • (5) K vytvoření JAR archívu slouží program jar, viz D.9..
  • (6) Způsoby zarovnávání jsou součástí HTML formátu - popis viz [WWW5].

Predchozi
Converted by Selathco v0.9 on 25.09.1999 19:46
Dalsi