Java - podstawy apletów
Na appletto program w języku Java, który działa w przeglądarce internetowej. Aplet może być w pełni funkcjonalną aplikacją Java, ponieważ ma do dyspozycji całe Java API.
Istnieje kilka ważnych różnic między apletem a samodzielną aplikacją Java, w tym:
Aplet to klasa Java, która rozszerza klasę java.applet.Applet.
Metoda main () nie jest wywoływana w aplecie, a klasa apletu nie definiuje metody main ().
Aplety są przeznaczone do osadzania na stronie HTML.
Kiedy użytkownik przegląda stronę HTML zawierającą aplet, kod apletu jest pobierany na komputer użytkownika.
Do wyświetlenia apletu wymagana jest maszyna JVM. JVM może być wtyczką przeglądarki internetowej lub oddzielnym środowiskiem wykonawczym.
JVM na komputerze użytkownika tworzy instancję klasy apletu i wywołuje różne metody w trakcie istnienia apletu.
Aplety mają ścisłe reguły bezpieczeństwa, które są wymuszane przez przeglądarkę internetową. Bezpieczeństwo apletu jest często nazywane bezpieczeństwem piaskownicy, porównując aplet do dziecka bawiącego się w piaskownicy z różnymi regułami, których należy przestrzegać.
Inne klasy, których potrzebuje aplet, można pobrać w jednym pliku Java Archive (JAR).
Cykl życia apletu
Cztery metody klasy Applet zapewniają strukturę, na której można zbudować każdy poważny aplet -
init- Ta metoda jest przeznaczona do jakiejkolwiek inicjalizacji potrzebnej dla twojego apletu. Jest wywoływana po przetworzeniu znaczników param wewnątrz znacznika apletu.
start- Ta metoda jest wywoływana automatycznie po wywołaniu przez przeglądarkę metody init. Jest również wywoływana za każdym razem, gdy użytkownik powraca do strony zawierającej aplet po wyjściu na inne strony.
stop- Ta metoda jest wywoływana automatycznie, gdy użytkownik opuści stronę, na której znajduje się aplet. Dlatego można go wywoływać wielokrotnie w tym samym aplecie.
destroy- Ta metoda jest wywoływana tylko wtedy, gdy przeglądarka zamyka się normalnie. Ponieważ aplety są przeznaczone do życia na stronie HTML, zwykle nie należy pozostawiać zasobów po opuszczeniu przez użytkownika strony zawierającej aplet.
paint- Wywoływane natychmiast po metodzie start (), a także za każdym razem, gdy aplet wymaga odświeżenia w przeglądarce. Metoda paint () jest w rzeczywistości dziedziczona z java.awt.
Aplet „Hello, World”
Poniżej znajduje się prosty aplet o nazwie HelloWorldApplet.java -
import java.applet.*;
import java.awt.*;
public class HelloWorldApplet extends Applet {
public void paint (Graphics g) {
g.drawString ("Hello World", 25, 50);
}
}
Te instrukcje importu przenoszą klasy do zakresu naszej klasy apletów -
- java.applet.Applet
- java.awt.Graphics
Bez tych instrukcji importu kompilator języka Java nie rozpoznałby klas Applet i Graphics, do których odwołuje się klasa apletu.
Klasa apletów
Każdy aplet jest rozszerzeniem klasy java.applet.Applet . Podstawowa klasa Applet udostępnia metody, które może wywołać pochodna klasa Applet w celu uzyskania informacji i usług z kontekstu przeglądarki.
Obejmują one metody, które wykonują następujące czynności -
- Pobierz parametry apletu
- Uzyskaj lokalizację sieciową pliku HTML zawierającego aplet
- Uzyskaj lokalizację sieciową katalogu klas apletów
- Wydrukuj komunikat o stanie w przeglądarce
- Pobierz obraz
- Pobierz klip audio
- Odtwórz klip audio
- Zmień rozmiar apletu
Ponadto klasa Applet udostępnia interfejs, za pomocą którego przeglądarka lub przeglądarka uzyskuje informacje o aplecie i kontroluje jego wykonanie. Widz może -
- Poproś o informacje o autorze, wersji i prawach autorskich apletu
- Poproś o opis parametrów rozpoznawanych przez aplet
- Zainicjuj aplet
- Zniszcz aplet
- Rozpocznij wykonywanie apletu
- Zatrzymaj wykonywanie apletu
Klasa Applet zapewnia domyślne implementacje każdej z tych metod. W razie potrzeby te implementacje mogą zostać zastąpione.
Aplet „Hello, World” jest kompletny w obecnej postaci. Jedyną nadpisywaną metodą jest metoda malowania.
Wywołanie apletu
Aplet można wywołać, osadzając dyrektywy w pliku HTML i przeglądając plik za pomocą przeglądarki apletów lub przeglądarki obsługującej język Java.
Znacznik <applet> jest podstawą osadzania apletu w pliku HTML. Poniżej znajduje się przykład wywołujący aplet „Hello, World” -
<html>
<title>The Hello, World Applet</title>
<hr>
<applet code = "HelloWorldApplet.class" width = "320" height = "120">
If your browser was Java-enabled, a "Hello, World"
message would appear here.
</applet>
<hr>
</html>
Note- Możesz zapoznać się z tagiem apletu HTML, aby dowiedzieć się więcej o wywoływaniu apletu z HTML.
Atrybut code tagu <applet> jest wymagany. Określa klasę apletu do uruchomienia. Szerokość i wysokość są również wymagane do określenia początkowego rozmiaru panelu, w którym działa aplet. Dyrektywa apletu musi być zamknięta znacznikiem </applet>.
Jeśli aplet przyjmuje parametry, wartości parametrów można przekazać, dodając znaczniki <param> między <applet> i </applet>. Przeglądarka ignoruje tekst i inne znaczniki między tagami apletów.
Przeglądarki bez obsługi języka Java nie przetwarzają <applet> i </applet>. Dlatego wszystko, co pojawia się między tagami, niezwiązane z apletem, jest widoczne w przeglądarkach bez obsługi języka Java.
Przeglądarka lub przeglądarka szuka skompilowanego kodu Java w lokalizacji dokumentu. Aby określić inaczej, użyj atrybutu codebase tagu <applet>, jak pokazano -
<applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class"
width = "320" height = "120">
Jeśli aplet znajduje się w pakiecie innym niż domyślny, pakiet wstrzymujący należy określić w atrybucie kodu przy użyciu znaku kropki (.), Aby oddzielić komponenty pakietu / klasy. Na przykład -
<applet = "mypackage.subpackage.TestApplet.class"
width = "320" height = "120">
Pobieranie parametrów apletu
Poniższy przykład demonstruje, jak sprawić, by aplet odpowiadał na parametry konfiguracji określone w dokumencie. Ten aplet wyświetla wzór szachownicy w kolorze czarnym i drugim kolorze.
Drugi kolor i rozmiar każdego kwadratu można określić jako parametry apletu w dokumencie.
CheckerApplet pobiera swoje parametry w metodzie init (). Swoje parametry może również pobrać w metodzie paint (). Jednak pobieranie wartości i zapisywanie ustawień raz na początku apletu, zamiast przy każdym odświeżaniu, jest wygodne i wydajne.
Przeglądarka lub przeglądarka apletów wywołuje metodę init () każdego uruchamianego apletu. Przeglądarka wywołuje init () raz, natychmiast po załadowaniu apletu. (Applet.init () nie robi nic.) Zastąp domyślną implementację, aby wstawić niestandardowy kod inicjujący.
Metoda Applet.getParameter () pobiera parametr o podanej nazwie parametru (wartością parametru jest zawsze łańcuch). Jeśli wartość jest danymi liczbowymi lub innymi danymi niebędącymi znakami, ciąg musi zostać przeanalizowany.
Poniżej znajduje się szkielet CheckerApplet.java -
import java.applet.*;
import java.awt.*;
public class CheckerApplet extends Applet {
int squareSize = 50; // initialized to default size
public void init() {}
private void parseSquareSize (String param) {}
private Color parseColor (String param) {}
public void paint (Graphics g) {}
}
Oto metody init () i private parseSquareSize () CheckerApplet -
public void init () {
String squareSizeParam = getParameter ("squareSize");
parseSquareSize (squareSizeParam);
String colorParam = getParameter ("color");
Color fg = parseColor (colorParam);
setBackground (Color.black);
setForeground (fg);
}
private void parseSquareSize (String param) {
if (param == null) return;
try {
squareSize = Integer.parseInt (param);
} catch (Exception e) {
// Let default value remain
}
}
Aplet wywołuje parseSquareSize (), aby przeanalizować parametr squareSize. parseSquareSize () wywołuje metodę biblioteczną Integer.parseInt (), która analizuje ciąg znaków i zwraca liczbę całkowitą. Integer.parseInt () zgłasza wyjątek, gdy jego argument jest nieprawidłowy.
Dlatego parseSquareSize () wychwytuje wyjątki, zamiast pozwalać apletowi na niepowodzenie w przypadku złego wejścia.
Aplet wywołuje parseColor (), aby przeanalizować parametr koloru na wartość Color. parseColor () wykonuje serię porównań ciągów, aby dopasować wartość parametru do nazwy wstępnie zdefiniowanego koloru. Musisz zaimplementować te metody, aby ten aplet działał.
Określanie parametrów apletu
Poniżej znajduje się przykład pliku HTML z osadzonym w nim CheckerApplet. Plik HTML określa oba parametry apletu za pomocą znacznika <param>.
<html>
<title>Checkerboard Applet</title>
<hr>
<applet code = "CheckerApplet.class" width = "480" height = "320">
<param name = "color" value = "blue">
<param name = "squaresize" value = "30">
</applet>
<hr>
</html>
Note - Nazwy parametrów nie uwzględniają wielkości liter.
Konwersja aplikacji na aplety
Łatwo jest przekonwertować graficzną aplikację Java (to znaczy aplikację korzystającą z AWT i którą można uruchomić za pomocą programu uruchamiającego Java) na aplet, który można osadzić na stronie internetowej.
Poniżej przedstawiono konkretne kroki konwersji aplikacji do apletu.
Utwórz stronę HTML z odpowiednim tagiem, aby załadować kod apletu.
Podaj podklasę klasy JApplet. Upublicznij te zajęcia. W przeciwnym razie aplet nie może zostać załadowany.
Wyeliminuj główną metodę w aplikacji. Nie twórz okna ramowego dla aplikacji. Twoja aplikacja zostanie wyświetlona w przeglądarce.
Przenieś kod inicjujący z konstruktora okna ramki do metody init apletu. Nie musisz jawnie konstruować obiektu apletu. Przeglądarka tworzy go za Ciebie i wywołuje metodę init.
Usuń wywołanie setSize; w przypadku apletów określanie rozmiaru odbywa się za pomocą parametrów szerokości i wysokości w pliku HTML.
Usuń wywołanie setDefaultCloseOperation. Nie można zamknąć apletu; kończy się po zamknięciu przeglądarki.
Jeśli aplikacja wywołuje setTitle, wyeliminuj wywołanie metody. Aplety nie mogą mieć pasków tytułu. (Oczywiście możesz zatytułować samą stronę internetową, używając znacznika tytułu HTML).
Nie wywołuj metody setVisible (true). Aplet zostanie wyświetlony automatycznie.
Obsługa zdarzeń
Aplety dziedziczą grupę metod obsługi zdarzeń z klasy Container. Klasa Container definiuje kilka metod, takich jak processKeyEvent i processMouseEvent, do obsługi określonych typów zdarzeń, a następnie jedną metodę typu catch-all o nazwie processEvent.
Aby zareagować na zdarzenie, aplet musi przesłonić odpowiednią metodę specyficzną dla zdarzenia.
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.applet.Applet;
import java.awt.Graphics;
public class ExampleEventHandling extends Applet implements MouseListener {
StringBuffer strBuffer;
public void init() {
addMouseListener(this);
strBuffer = new StringBuffer();
addItem("initializing the apple ");
}
public void start() {
addItem("starting the applet ");
}
public void stop() {
addItem("stopping the applet ");
}
public void destroy() {
addItem("unloading the applet");
}
void addItem(String word) {
System.out.println(word);
strBuffer.append(word);
repaint();
}
public void paint(Graphics g) {
// Draw a Rectangle around the applet's display area.
g.drawRect(0, 0,
getWidth() - 1,
getHeight() - 1);
// display the string inside the rectangle.
g.drawString(strBuffer.toString(), 10, 20);
}
public void mouseEntered(MouseEvent event) {
}
public void mouseExited(MouseEvent event) {
}
public void mousePressed(MouseEvent event) {
}
public void mouseReleased(MouseEvent event) {
}
public void mouseClicked(MouseEvent event) {
addItem("mouse clicked! ");
}
}
Teraz nazwijmy ten aplet w następujący sposób -
<html>
<title>Event Handling</title>
<hr>
<applet code = "ExampleEventHandling.class"
width = "300" height = "300">
</applet>
<hr>
</html>
Początkowo aplet wyświetli komunikat „Inicjalizacja apletu. Uruchamianie apletu”. Następnie po kliknięciu wewnątrz prostokąta zostanie również wyświetlony komunikat „kliknięcie myszą”.
Wyświetlanie obrazów
Aplet może wyświetlać obrazy w formacie GIF, JPEG, BMP i innych. Aby wyświetlić obraz w aplecie, należy użyć metody drawImage () znajdującej się w klasie java.awt.Graphics.
Poniżej znajduje się przykład ilustrujący wszystkie kroki, aby wyświetlić obrazy -
import java.applet.*;
import java.awt.*;
import java.net.*;
public class ImageDemo extends Applet {
private Image image;
private AppletContext context;
public void init() {
context = this.getAppletContext();
String imageURL = this.getParameter("image");
if(imageURL == null) {
imageURL = "java.jpg";
}
try {
URL url = new URL(this.getDocumentBase(), imageURL);
image = context.getImage(url);
} catch (MalformedURLException e) {
e.printStackTrace();
// Display in browser status bar
context.showStatus("Could not load image!");
}
}
public void paint(Graphics g) {
context.showStatus("Displaying image");
g.drawImage(image, 0, 0, 200, 84, null);
g.drawString("www.javalicense.com", 35, 100);
}
}
Teraz nazwijmy ten aplet w następujący sposób -
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code = "ImageDemo.class" width = "300" height = "200">
<param name = "image" value = "java.jpg">
</applet>
<hr>
</html>
Odtwarzam dźwięk
Aplet może odtwarzać plik audio reprezentowany przez interfejs AudioClip w pakiecie java.applet. Interfejs AudioClip ma trzy metody, w tym -
public void play() - Odtwarza klip audio jeden raz, od początku.
public void loop() - Powoduje ciągłe odtwarzanie klipu audio.
public void stop() - Zatrzymuje odtwarzanie klipu audio.
Aby uzyskać obiekt AudioClip, należy wywołać metodę getAudioClip () klasy Applet. Metoda getAudioClip () zwraca natychmiastowy wynik, niezależnie od tego, czy adres URL jest tłumaczony na rzeczywisty plik audio. Plik audio nie jest pobierany, dopóki nie zostanie podjęta próba odtworzenia klipu audio.
Poniżej znajduje się przykład ilustrujący wszystkie kroki, aby odtworzyć dźwięk -
import java.applet.*;
import java.awt.*;
import java.net.*;
public class AudioDemo extends Applet {
private AudioClip clip;
private AppletContext context;
public void init() {
context = this.getAppletContext();
String audioURL = this.getParameter("audio");
if(audioURL == null) {
audioURL = "default.au";
}
try {
URL url = new URL(this.getDocumentBase(), audioURL);
clip = context.getAudioClip(url);
} catch (MalformedURLException e) {
e.printStackTrace();
context.showStatus("Could not load audio file!");
}
}
public void start() {
if(clip != null) {
clip.loop();
}
}
public void stop() {
if(clip != null) {
clip.stop();
}
}
}
Teraz nazwijmy ten aplet w następujący sposób -
<html>
<title>The ImageDemo applet</title>
<hr>
<applet code = "ImageDemo.class" width = "0" height = "0">
<param name = "audio" value = "test.wav">
</applet>
<hr>
</html>
Możesz użyć test.wav na swoim komputerze, aby przetestować powyższy przykład.