Click on http://groups.google.com/group/InfoAb/web/cursuri-an-iii-sem-2?hl=en
- or copy & paste it into your browser's address bar if that doesn't
work.
import java.applet.Applet;
class AppletThread1 extends Applet implements Runnable {
Thread appletThread = null;
public void init() {
if (appletThread == null) {
appletThread = new Thread(this);
appletThread.start();
}
}
public void run() {
//codul firului de executie
}
}
In cazul în care firul de executie pornit de applet efectueaza
operatii ce au sens doar daca appletul este vizibil, cum ar fi
animatie, ar fi de dorit ca acesta sa se opreasca atunci când appletul
nu mai este vizibil (la apelul metodei stop) si sa reporneasca atunci
când appletul redevine vizibil (la apelul metodei start).
import java.applet.Applet;
public class StructuraApplet extends Applet implements Runnable {
Thread appletThread = null;
boolean running = false;
public void start() {
//reporneste firul de executie
if (appletThread == null) {
appletThread = new Thread(this);
running = true;
appletThread.start();
}
}
public void stop() {
//opreste firul de executie
running = false;
appletThread = null;
}
public void run() {
while (running) {
//codul firului de executie
}
}
}
Un applet este considerat activ imediat dupa apelul metodei start si
devine inactiv la apelul metodei stop.Pentru a afla daca un applet
este activ se foloseste metoda isActive.
Alte metode oferite de clasa Applet
Clasa Applet ofera metode specifice applet-urilor pentru:
Punerea la dispozitie a unor informatii despre applet
Similara cu metoda getParameterInfo ce oferea o "documentatie" despre
parametrii pe care îi suporta un applet, exista metoda getAppletInfo
ce permite specificarea unor informatii legate de applet cum ar fi
numele, autorul, versiunea, etc. Metoda returneaza un sir de caractere
continând informatii despre applet.
public String getAppletInfo() {
return "Cel mai simplu applet, autor necunoscut, ver 1.0";
}
Aflarea unor adrese URL referitoare la applet
Se realizeaza cu metodele:
getCodeBase - ce returneaza URL-ul directorului ce contine clasa
appletului
getDocumentBase - returneaza URL-ul directorului ce contine
documentul HTML în care este inclus appletul respectiv.
Sunt foarte utile deoarece permit specificarea relativa a fisierelor
folosite de un applet.
Afisarea imaginilor
Afisarea imaginilor într-un applet se face fie prin intermediul unei
componente ce permite acest lucru, cum ar fi o suprafata de desenare
de tip Canvas, fie direct în metoda paint a applet-ului, folosind
metoda drawImage a clasei Graphics. In ambele cazuri, încarcarea
imaginii în memorie se va face cu ajutorul metodei getImage din clasa
Applet. Aceasta poate primi ca argument fie adresa URL absoluta a
fisierului ce contine imaginea, fie calea sa relativa la o anumita
adresa URL, cum ar fi cea a directorului în care se gaseste documentul
HTML ce contine appletul (getDocumentBase) sau a directorului în care
se gaseste clasa appletului (getCodeBase).
import java.applet.Applet;
import java.awt.*;
public class AppletImagine extends Applet {
Image img = null;
public void init() {
img = getImage(getCodeBase(), "taz.gif");
}
public void paint(Graphics g) {
g.drawImage(img, 0, 0, this);
}
}
Afisarea unor mesaje în bara de stare a browserului
Acest lucru se realizeaza cu metoda showStatus
public void init() {
showStatus("Initializare applet...");
}
Aflarea contextului de executie
Contextul de executie al unui applet se refera la pagina în care
acesta ruleaza si este descris de interfata AppletContext. Crearea
unui obiect ce implementeaza aceasta interfata se realizeaza de catre
browser, la apelul metodei getAppletContext a clasei Applet. Prin
intermediul acestei interfete un applet poate "vedea" în jurul sau,
putând comunica cu alte applet-uri aflate pe aceeasi pagina sau cere
browser-ului sa deschida diverse documente.
AppletContext env = getAppletContext();
Afisarea unor documente în browser
Se face cu metoda showDocument ce primeste adresa URL a fisierului ce
contine documentul dorit (text, html, imagine, etc). Aceasta metoda se
gaseste în interfata AppletContext.
try {
URL doc = new URL("http://www.uab.ro");
getAppletContext().showDocument(doc);
} catch(MalformedURLException e) {}
Comunicarea cu alte applet-uri aflate pe aceeasi pagina
Aceasta comunicare implica de fapt identificarea unui applet aflat pe
aceeasi pagina si apelarea unei metode sau setare unei variabile
publice a acestuia. Identificarea se face prin intermediu numelui pe
care orice instanta a unui applet îl poate specifica prin atributul
NAME. (vezi tag-ul <APPLET>).
Obtinerea unei instante a unui applet al carui nume îl cunoastem sau
obtinerea unei enumerari a tuturor applet-urilor din pagina se fac cu
metodele definite de interfata AppletContext getApplet si getApplets.
În general appleturile pot comunica între ele în mai multe moduri:
Folosind variabile statice dacă sunt în aceaaşi pagină HTML şi
provin din aceeaşi clasă
Folosind serverul de WEB
Folosind contextul applet-ului(AppletContext)şi
Folosind fişerele pe disc.
O pagină HTML poate conţine mai multe appleturi. Toate appleturile
sunt introduse în pagina HTML prin intermediul etichetei <Applet>
împreună cu precizarea codului şi a dimensiunilor ferestrei. Pentru a
face posibilă referirea la un anumit applet se adaugă în pagina HTML
un nume.
Obţinerea unei referinţe la applet se face prin intermediul
contextului din browser-ul în care este executat.
Ex: Dacă appletul este creat dintr-o clasă NumeClApplet care extinde
clasa Applet, acesta moşteneşte metoda getAplletContext() care
furnizeazăcontextul browserului care a creat appletul. În acest mod
applet-ul poate obţine informaţii despre mediul în care este executat
şi poate acţiona asupra lui.
Toate appleturile din pagina HTML au acelaşi context. Pentru a le
deosebi se foloseşte metoda getApplet(String) din clasa abstractă
AppletContext(). Referinţa la applet se obţine prin intemrediul
operatorului cast:
NumeClApplet
appl1=(NumeClApplet)getAppletContext().getApplet("NumeApplet");
Metoda getApplets() furnizează toate appleturile din pagina HTML.
Acestea pot fi folosite prin intermediul unui obiect Enumeration.
Applet care comunică cu un altul aflat în aceaşi pagină HTML. În
pagina HTML sunt incluse două instanţe cu numele Applet 1 şi Applet2
care sunt înzestrate cu două butoane prin intermediul cărora se poate
scrie ceva în acelaşă applet şi dintr-un applet în altul.
Avînd contextul unui applet se pot afişa mesaje în bara d estare a
browser-ului care rulează appletul folosind metoda showStatus().
<HTML>
<HEAD>
<TITLE>Pagina HTML pentru appletul AppCom</TITLE>
</HEAD>
<BODY>
<p>Appletul afiseaza
<br>
<APPLET CODE="AppCom.class" width=300 height=300 name="Applet1">
</APPLET>
<APPLET CODE="APPCOM.class Width=300 height=300 name="Applet2">
</APPLET>
</BODY>
</HTML>
cod_sursa
import java.awt.Button;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
public class AppCom extends java.applet.Applet implements
MouseListener
{
public AppCom app11, app12;
Label et1=new Label("Eticheta statica");
Label etic1=new Label("Eticheta1", Label.CENTER);
Label etic2=new Label("Eticheta 2",Label.CENTER);
Label etic3=new Label("",Label.CENTER);
Font fnt=new Font("NewTimesR", Font.BOLD,12);
Button but1=new Button("Buton1");
Button but2=new Button("Buton2");
GridLayout aranjare=new GridLayout(3,2);
public void init()
{
setFont(fnt);
setLayout(aranjare);
add(etic1);
add(etic2);
add(but1);
add(but2);
add(et1);
but1.addMouseListener(this);
but2.addMouseListener(this);
}
public void mouseClicked(MouseEvent e)
{
app11=(AppCom) getAppletContext().getApplet("Applet1");
app12=(AppCom) getAppletContext().getApplet("Applet2");
getAppletContext().showStatus("Appletul este activ");
if (e.getSource()==but1)
{
if (this==app11)
{
etic1.setText("Applet1 este activ");
app12.etic2.setText("Applet1 scrie");
}
else
{
etic1.setText("Acesta este Applet2");
app11.etic2.setText("Applet2 scrie");
}
}
if (e.getSource()==but2)
{
if(this==app12)
{
etic2.setText("Applet1 este activ");
app12.etic2.setText("Applet1 scrie");
}
else
{
etic2.setText("Acesta este Applet1");
app11.etic2.setText("Applet2 scrie");
}
}
//app12.etic2.setText("Applet1 a sters");
//else app11.etic2.setText("Applet2 a sters");
}
public void mousePressed(MouseEvent e)
{
if (e.getSource()==but1)
{
app11.et1.setText("A fost actionat un buton!");
app12.et1.setText("A fost actionat un buton!");
}
}
public void mouseExited(MouseEvent e)
{
}
public void mouseEntered(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e)
{
if(e.getSource()==but1)
{et1.setText("Buton1 a sters");
app11.etic1.setText("Acesta este Applet1");
app12.etic1.setText("Acesta este Applet2");
}
if(e.getSource()==but2)
{et1.setText("Buton2 a sters");
app12.etic1.setText("Acesta este Applet2");
app11.etic2.setText("Acesta este Applet1");
}
}
}
Similar se putea concepe două appleturi complet diferite (să provină
din clase diferite) dar care sunt incluse în aceiaşi pagină şi care
pot comunica între ele.
Probleme de securitate
Un applet nu poate sa:
Citeasca sau scrie fisiere pe calculatorul pe care a fost încarcat
(client)
Deschida conexiuni cu alte masini în afara de cea de pe care provine
(host)
Porneasca programe pe masina client
Citeasca diverse proprietati ale sistemului de operare al
clientului
Ferestrele folosite de un applet, altele decât cea a browserului, vor
arata altfel decât într-o aplicatie obisnuita.
Programe care sunt atât appleturi cât si aplicatii
import java.applet.Applet;
import java.awt.*;
public class AppletApp extends Applet {
public void init() {
add(new Label("Applet si aplicatie"));
}
public static void main(String args[]) {
AppletApp applet = new AppletApp();
Frame f = new Frame("Aplicatie si applet");
f.setSize(200, 200);
f.add(applet, BorderLayout.CENTER);
applet.init();
applet.start();
f.show();
}
}