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