Aplety - podstawy tworzenia

gaborek

Art ten jest dla ludzi, którzy już poznali podstawy Java - wiedzą co to Klasa, metoda, dziedziczenie oraz umieją się posługiwać swoim kompilatorem (nie tłumaczę tu jak kompilować)
Aplety są to programiki napisane w Java, które ładuje się odpowiednimi znacznikami na stronę www i które są z poziomu przeglądarki internetowej uruchamiane. Są jednak pewne różnice między aplikacją w Java, a apletem.

Aplety są:

  • są inaczej uruchamiane
  • nie mają metody main() (są inne pełniące odpowiednie zadania np. init(), paint())
  • aplety są podklasami albo JApplet (javax.swing) lub jej klasy bazowej Applet (java.applet).
    Co daje dziedziczenie z tych klas? - program może reagować na zdarzenia występujące w przeglądarce (np. odświeżanie).

Oto przykładowa deklaracja klasy:

public class myApplet extends javax.swing.JApplet; //JApplet jest publiczna więc ta też musi
{
//kod apletu
}

Przeglądarka ładuje tą klasę apletu wraz z klasami pomocniczymi, które już mogą być public lub private.
Wspomniałem już że niema w apletach metody main(), a zamiast niej są inne. Te "inne" składają się razem na tzw. cykl życia apletu:
init() ? start() ? stop() ? destroy().

init() - Inicjalizacja:
Przeglądarka napotykając na metodę init() tworzy wszystkie obiekty jakie ta metoda każe, więc w kod metody daje się takie rzeczy jak kolor tła apletu, przyciski itp.

start() - startująca:
Wykonywana po inicjalizacji lub wywoływana gdy użytkownik wróci na stronę z apletem(może być wykonana wielokrotnie, a inicjalizacja raz ponieważ użytkownik może wracać na stronę z apletem wielokrotnie).

stop() - zatrzymująca:
Wywoływana gdy użytkownik opuści stronę z apletem lub po wywołaniu metody stop().

destroy() - koniec życia apletu (zwolnienie pamięci zajmowanej przez program).

start(), stop(), destroy() są przeważnie stosowane do uruchamiania, zatrzymywania, niszczenia wątków
ponieważ normalnie praca wątku jest kontynuowana po opuszczeniu strony przez użytkownika.

Ale także do tych "innych" można zaliczyć użytą w programie zegarek(w dalszej części) metodę paint(), która odpowiada za wyświetlanie grafiki (w tym oprócz obrazków także linie, tekst).
Aby użyć tych metod należy je przesłonić, oto przykłady:

public void init()
{
}

public void start()
{
}
public void stop()
{
}

public void destroy()
{
}

public void paint(Graphics g)
{
}

Tutaj, w ostatnim przykładzie do metody paint() przkazany jest jako argument obiekt klasy Graphics przez samą przeglądarkę należy jedynie dodać import klasy za pomocą polecenia import java.awt.Graphics;

Zróbmy przykładowy aplet i umieśćmy go na stronie www.

import java.awt.*; //importujemy klasy
import java.util.*;

public class zegarek extends javax.swing.JApplet //klasa główna dziedziczy z JApplet
{ 
	private Color butterscotch = new Color(255, 204, 102); // ustawiamy sobie kolor
	private String lastTime = ""; //obiekt String o zmiennej lastTime o wartości ""

	public void init()  //inicjalizacja
	{
		setBackground(Color.black); //ustawienie koloru tła na czarny
	}

	public void paint(Graphics screen) 
	{
		Graphics2D screen2D = (Graphics2D)screen;
		Font type = new Font("Monospaced", Font.BOLD, 20); //ustawiamy czcionkę dla zegarka
		screen2D.setFont(type); //czcionka (type) przypisywana do zegarka
		GregorianCalendar day = new GregorianCalendar(); //kalendarz gregoriański
		String time = day.getTime().toString(); // metoda gettime zwraca date i czas
		screen2D.setColor(Color.black);
		screen2D.drawString(lastTime, 5, 25);

		screen2D.setColor(butterscotch);
		screen2D.drawString(time, 5, 25);
		try
		{
			Thread.sleep(1000); // metoda powoduje że program "śpi" przez sekundę (1000milisekund)
		} catch (InterruptedException e) {}
	lastTime = time;
	repaint(); //przerysowanie
	}
}

Aplet należy skompilować do postaci zegarek.class, a gdy się to zrobi należy przygotować dokument HTML, który uruchomi go w przeglądarce. Otwieramy notatnik i piszemy:

<html> <head> <title>Applet HTML Page</title> <head> <body>

Applet HTML Page

<applet code="zegarek.class" width="350" height="200"></applet>

</body> </html> ```

Zapisujemy np. jako aplet.html.
Wyjaśnienie atrybutów znacznika applet:
code - nazwa głównej klasy apletu
width - szerokość
height - wysokość
W tym wypadku plik *.class musi znajdować się w tym samym kalatogu co strona www, a jeśli tak nie jest to dajemy atrybut codebase np.

<applet code="zegarek.class" codebase="katalog" width="350" height="200"></applet> ``` gdzie "katalog" to nazwa katalogu w którym apalet się znajduje.

Gdy uruchomi się plik aplet.html w przeglądarce to na stronie powinien pokazać się nasz program (no chyba że nasza przeglądarka nie obsługuje apletów ale to nie jest tematem). Zamiast znacznika apple można użyć znacznika object, który jest bardziej uniwersalnym, a obsługują go Netscape Nawigator i Microsoft Internet Explorer pow. v.4.0 ale niestety nie obsługuje Opera więc czasem lepiej używać tego pierwszego.

Archiwa tworzy się aby przyspieszyć działanie apletu (ciągłe odwołania do różnych plików spowalniają pracę). Wszystkie klasy i pliki graficzne można wrzucić do jednego pliku o rozszerzeniu *.jar, a umożliwia to narzędzie jar (część pakietu SDK) można to zrobić poleceniem

jar cf zegar.jar *.class *.gif

które załaduje do pliku zegar.jar wszystkie pliki o rozszerzeniu *.class oraz *.gif. Aby zobaczyć wszystkie parametry tego programu należy wpisać jar bez niczego więcej. Po czymś takim do znacznika
applet należy dodać atrybut archives, np.:

<APPLET code="zegarek.class" archive="zegar.jar" width=350 height=200></APPLET>

Można z poziomu dokumentu strony przekazać do apletu jakiś parametr.
<ol style="margin-top: 0cm; margin-bottom: 0cm" start="1" type="1">
  <li>Należy do dokumentu strony dodać znacznik z odpowiednimi atrybutami:</li>
</ol>
`<param name=font value=TimesRoman`
gdzie jak się można domyśleć:
<b>name</b> - to nazwa zmiennej
<b>value</b> - to wartość

Takich parametrów można do dokumentu dodać ile się chce.
<ol style="margin-top: 0cm; margin-bottom: 0cm" start="2" type="1">
  <li class="MsoNormal">W kodzie programu musi znajdować się coś co te parametry odbierze:</li>
</ol>
Do odbioru służy metoda getParameter(), która pobiera wartość wskazanego parametru, np. 
```java
String fontName = getParameter("font")

Gdy wartość ta nie jest określona to metoda getParameter zwraca null, więc aby zapobiec błędom należy zastosować warunek, np.

String fontName = getParameter("font");
if (fontName == null)
	fontName = "Curier";

Wydaje mi się, że większość z was nie chce rezygnować z możliwości jakie dają nowsze wersje języka Java, a żeby tak było na komputerze użytkownika musi być załadowany tzw. plug-in (darmowy program, który zawiera odpowiednie bibliotekiaby uruchamiać móc uruchamiać aplety napisane w Java 2). Pewnie nie każdy ma ten program więc należy przed uruchomieniem apletu sprawdzić to i ewentualnie umożliwić zainstalowanie go sobie.

Trzeba przygotować dokument www, w który już będą wypełnione atrybutami znaczniki o których wspomniałem.</li> Należy przepuścić dokument przez program, który przystosuje go do sprawdzenia czy są plug-in'y czy ich nie ma i odpowiedniego zareagowania.</li> </ol> Takim darmowym programem jest HTMLConvert dostępny na witrynie firmy Sun (ale tak najlepiej to poszukać na google.pl, na pewno są lepsze). Gdy stronę spreparujesz tym programem to w przypadku gdy użytkownik nie ma plug-in'a zostanie wyświetlone zapytanie czy chce on zainstalować. Na szczęście większość już ma go.

8 komentarzy

em1x, po co to komentujesz? Człowiek wykazał inicjatywę, poświęcił własny czas aby pomóc innym, więc przydałoby się okazać trochę szacunku lub elementarne podstawy kultury.
Jeśli potrafisz uzasadnić słowo "masakra", w co wątpię, to zamiast pisać samo słowo mógłbyś opisać co zrobić żeby nie była "masakra".
Jeśli mnie nie rozumiesz, to trudno. W języku Kalego nie potrafię pisać.

Mnie się na początek tekst przydał. Jest też na górze wyszukiwania google pod hasłem "java aplet", które jest w podpowiedziach(jest więc popularne), wniosek: artykuł oprócz przekazywanej wiedzy pomaga forum się wypozycjonować. Gratulacje udanego artykułu.

Pozdrawiam,
A.

A mi ten temat pomógł. Może nie wiele, ale na pewno usystematyzował moją obecną wiedzę :)

Poprawiłem formatowanie, lecz niestety nadal jest trochę chaosu. Wynika to z mojej niewiedzy na temat Javy. Jakby ktoś to jeszcze dopoprawiał to byłoby super.

Mi sie podoba. Dla poczatkujacego wsam raz.

Skoro komentować to trafiłęm na jeden drobny błędzik:
jak jest: "} catch (InterruptedException e)
}
" ,a dopiero jak porawiłęm na:
"} catch (InterruptedException e)
{}
" to mi skompilował.... ,a tak to fajnie tylko i tak czy siak musze kupić sobie bucha do tego (Delphi jusz mnie tak nie kręci...)

e no jeden blad jes niestety...:(
no wiec nie "archives" tylko "archive"

Trocze ten tekst jest po rozrzucany :)