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.).
Uvedená omezení se mohou v budoucnu zmírnit - po rozšíření
autentifikačních a šifrovacích mechanismů, podrobnosti viz [WWW8].
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:
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.
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:
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:
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>
|
|
|