Sunteți pe pagina 1din 13

Modele de programare

Un nou limbaj de programare nu are anse s se impun fr s ofere, pe lng sintaxa propriu-zis
un set de biblioteci sau o ierarhie de clase coerent i ct mai general. Atunci cnd limbajul C a fost
prezentat pentru prima dat, mpreun cu el a fost prezentat i biblioteca standard de intrare ieire. Primul
program C pe care l-am nvat coninea deja apelul:
printf( "hello, world!" );
Limbajul Java nu face excepie de la aceast regul. Interfaa Java pentru programarea aplicaiilor
(API) ofer o ierarhie de clase care include funcionalitate pentru lucrul cu mai multe fire de execuie,
lucrul n reea, crearea interfeelor utilizator complexe, grafic, etc.
Exist mai multe moduri de a aborda scrierea unui program. Unul dintre acestea este scrierea unui
program care are iniiativa pe toat perioada rulrii. Acest tip de programe execut n permanen o
secven de cod, fie i numai o bucl de ateptare a crei condiie depinde de elemente exterioare precum ar
fi o apsare de tast sau sosirea unui pachet de date din reea.
Alternativa este aceea de a scrie programe care intr n execuie doar atunci cnd sunt generate
anumite evenimente n sistem. n clipa n care apar aceste evenimente, programul le analizeaz i execut o
secven de cod specific evenimentului respectiv. Dup execuia codului, programul se oprete din nou
pn la apariia unui nou eveniment.
Aceste dou alternative diferite de a aborda scrierea unui program i au rdcinile n moduri
diferite de lucru ale sistemelor de operare i n moduri diferite de a gndi interfaa cu utilizatorul.
Java implementeaz ambele stiluri de programe discutate mai sus. n primul caz, avem o clas de
pornire care conine o funcie public principal i care va fi lansat n execuie la apelarea programului. n
acest caz programul i controleaz complet execuia ulterioar. n termenii limbajului Java, aceasta este o
aplicaie.
n al doilea caz, codul ruleaz n interiorul unui navigator Internet. Clasa de pornire trebuie s aib
implementate metode de rspuns la anumite evenimente pe care le genereaz navigatorul, precum ar fi
iniializare, pornire, oprire, desenare, etc. Acest al doilea tip de programe Java le vom numi apleturi.
Distincia dintre cele dou moduri de organizare a codului este destul de vag, din cauz c cele
dou moduri de lucru se pot amesteca n realitate, un obiect aplet putnd fi n acelai timp lansat ca
aplicaie independent i invers. Totul depinde de metodele care au fost definite n interiorul clasei de
pornire a programului.

Aplicaii Java
Cea mai simpl aplicaie Java este declaraia unei clase de pornire coninnd o singur metod,
main, ca n exemplul urmtor:
public class HelloWorld {
public static void main( String args[] ) {
System.out.println( "Hello, world!" );
}
}
Acest exemplu definete o funcie principal care afieaz un simplu mesaj pe consola aplicaiei.
Afiarea este lsat n sarcina clasei java.lang.System care conine n interior implementarea ieirii i intrrii
standard precum i a ieirii standard de eroare sub forma unor referine ctre obiecte de tip InputStream
pentru in (intrarea standard) respectiv PrintStream pentru out i err (ieirea standard i ieirea standard de
eroare).
Numele metodei main este obligatoriu, la fel i parametrul acesteia. Atunci cnd lansm
interpretorul Java mpreun cu numele unei clase care reprezint clasa de pornire, interpretorul caut n
interiorul acestei clase definiia unei metode numite main . Aceast metod trebuie s fie obligatoriu public
i static. n acelai timp, metoda main trebuie s nu ntoarc nici un rezultat i s accepte un singur
parametru de tip tablou de iruri de caractere.
Dac interpretorul gsete aceast metod n interiorul clasei apelate, el lanseaz n execuie metoda
main. Atenie, metoda main fiind de tip static, nu poate apela dect variabile statice. De obicei ns, metoda
main nu face nimic altceva dect s-i prelucreze parametrul dup care s creeze o serie de obiecte care vor
controla execuia ulterioar a aplicaiei.
Singurul parametru al metodei main este un tablou care conine argumentele aflate pe linia de
comand n momentul apelului. Nu este necesar transmiterea numrului de argumente care au fost gsite
pe linia de comand pentru c tablourile Java conin n interior informaii relative la numrul de elemente.
Acest numr de elemente se poate obine prin accesarea variabilei length din interiorul tabloului ca n
exemplul urmtor care listeaz parametrii de pe linia de comand la lansarea unei clase:
public class Arguments {
public static void main( String args[ ] ) {
for( int i = 0; i < args.length; i++ ) {
System.out.println( args[i] );
}
}
}
Iat un exemplu de rulare a acestei aplicaii:
>java Arguments unu doi trei
unu
doi
trei
>

Apleturi Java
Apleturile Java ruleaz ntr-un document HTML. n acest document, fiecare aplet are rezervat o
fereastr dreptunghiular prin care comunic cu utilizatorul. Dreptunghiul de ncadrare al ferestrei este
definit ntr-un tag HTML numit APPLET. Aceast fereastr este n exclusivitate la dispoziia apletului care
este responsabil de desenarea ei i de tratarea eventualelor evenimente care se refer la ea.
mpreun cu definirea interfeei dintre apleturi i navigator, Sun a definit i o sintax specific
noului tag HTML care permite poziionarea i dimensionarea ferestrei apletului n document precum i
specificarea unor parametri care s poat altera modul de lucru al apletului.
Iat un prim exemplu de aplet:
import java.awt.Graphics;
public class HelloWorldApplet extends java.applet.Applet {
public void init() {
resize( 150,25 );
}
public void paint( Graphics g ) {
g.drawString( "Hello world!", 50, 25 );
}
}
n mod minimal, apletul nu definete dect dou metode i anume una de iniializare, necesar
pentru organizarea mediului n care ruleaz apletul i una de desenare a spaiului destinat apletului n
interiorul documentului HTML. Metoda de iniializare nu face n acest caz dect s redimensioneze spaiul
alocat n mod corespunztor necesitilor sale n timp ce metoda de desenare afieaz n acest spaiu un
mesaj de salut.
Pentru a vedea rezultatele rulrii acestui aplet trebuie s construim un document minimal HTML, care
poate s arate n felul urmtor:
<HTML>
<HEAD>
<TITLE> Hello World Applet </TITLE>
</HEAD>
<BODY>
<APPLET CODE="HelloWorldApplet.class" WIDTH=150 HEIGHT=25>
....
</APPLET>
</BODY>
</HTML>
Spre deosebire de o aplicaie normal Java, apleturile nu pot primi parametri pe linia de comand
pentru c nu exist linie de comand. Din acest motiv, trebuie s introducem parametrii apletului n fiierul
HTML. De exemplu am putea introduce, imediat dup linia de declaraie a apletului o linie de forma:
<PARAM NAME=mesaj VALUE="Salutare, lume!">
i s modificm codul apletului dup cum urmeaz:
import java.awt.Graphics;
public class HelloWorldApplet extends java.applet.Applet {
private String sir;
public void init() {
sir=getParameter( "mesaj" );
if( sir == null ) {
sir = "Hello, World!";
}
resize( 150,25 );
}
public void paint( Graphics g ) {
g.drawString( sir, 50, 25 );
}
}
n acest mod putem s controlm la lansare iniializarea apletului. n definiia clasei Applet exist i
dou funcii care permit navigatorului regsirea unui minim de informaii despre aplet. Aceste informaii
reprezint descrierea apletului i a parametrilor acestuia. Funciile care trebuiesc definite n noua clas
derivat din Applet sunt getAppletInfo i getParameterInfo. De exemplu, putem introduce n clasa
HelloWorldApplet dou noi funcii:
public String getAppletInfo() {
return "Applet scris de XXX ";
}
public String [ ][ ] getParameterInfo( ) {
String info[ ][ ] = {
{ "Parametru", "String", "Textul de afisat" }
};
return info;
}
Execuia unui aplet este marcat de cteva evenimente importante generate de ctre navigator.
Atunci cnd navigatorul ntlnete o etichet APPLET, pornete n primul rnd ncrcarea codului necesar
rulrii apletului. Pn cnd acest cod nu a ajuns pe calculatorul client, apletul nu poate fi pornit.
Dup ncrcarea codului, apletul este apelat pentru iniializare. Acesta este momentul n care apletul
i pregtete parametrii i obine de la sistem resursele necesare rulrii. Dup ce iniializarea a fost
terminat, navigatorul trimite ctre aplet o comand de pornire. Aceasta este comanda care pune efectiv
apletul n funciune deschiznd interaciunea cu utilizatorul.
Un aplet ruleaz atta timp ct navigatorul este activ. La schimbarea paginii curente, apleturile din
vechea pagin nu sunt distruse, dar primesc o comand de oprire temporar (pe care de altfel pot s o
ignore). La rencrcarea paginii, o alt comand de pornire este lansat spre aplet i acest ciclu se poate
relua. n sfrit, la oprirea navigatorului, apletul primete o comand de oprire definitiv, caz n care el
trebuie s elibereze toate resursele pe care le blocheaz.
Orice aplet Java reprezint, din punctul de vedere al limbajului un nou tip de obiect, derivat din
obiectul standard Applet. Atunci cnd navigatorul lanseaz un nou aplet el nu face altceva dect s
instanieze un nou obiect din aceast clas. Subrutinele care trateaz evenimentele descrise anterior
trebuiesc definite ca metode n interiorul acestui nou tip de obiecte.
n continuare, ntre dou evenimente de pornire i respectiv de oprire temporar a apletului
navigatorul transmite ctre aplet evenimente specifice oricrei interfee grafice cum ar fi evenimentul care
provoac redesenarea spaiului destinat apletului, evenimente legate de apsarea unor taste sau a unor
butoane ale mausului, etc. Ca rspuns la aceste evenimente, apletul trebuie s reacioneze schimbnd
coninutul ferestrei, lansnd mesaje sonore, etc. Iat i un exemplu de aplet care ne arat fazele prin care
trece un aplet n timpul existenei sale:
import java.applet.Applet;
import java.awt.*;

public class Evenimente extends Applet {


public void init() {
// metoda de iniializare
// este apelat la construcia noii instane de aplet
System.out.println("init");
}

public void paint(Graphics g) {


// metoda de desenare
// este apelat ori de cte ori este necesar
// redesenarea ferestrei apletului
System.out.println("paint");
}

public void start() {


// metoda de lansare in execuie
// este apelat la pornire
//sau la rentoarcerea n pagina apletului
System.out.println("start");
}
public void stop() {
// metoda de oprire temporar a execuiei
System.out.println( "stop" );
}

public void destroy() {


// metoda de oprire definitiv
System.out.println("destroy");
}

public void update(Graphics g) {


// metoda de actualizare a ferestrei apletului
// este apelata atunci cnd nu este necesar redesenarea
// ntregii ferestre. n mod implicit,
// metoda apeleaz metoda paint.
System.out.println("update");
}

public boolean mouseUp(Event e, int x, int y) {


// S-a ridicat butonul mouse-lui n fereastra apletului.
System.out.println("mouseUp");
return false;
}

public boolean mouseDown(Event e, int x, int y) {


// S-a apsat butonul mouse-lui n fereastra apletului
System.out.println("mouseDown");
return false;
}

public boolean mouseDrag(Event e, int x, int y) {


// S-a micat mouse-ul n fereastra apletului
// cu butonul apsat
System.out.println("mouseDrag");
return false;
}

public boolean mouseMove(Event e, int x, int y) {


// S-a micat mouse-ul n fereastra apletului
System.out.println("mouseMove");
return false;
}

public boolean mouseEnter(Event e, int x, int y) {


// Mouse-ul a ptruns n fereastra apletului
System.out.println("mouseEnter");
return false;
}

public boolean mouseExit(Event e, int x, int y) {


// mouse-ul a ieit din fereastra apletului
System.out.println("mouseExit");
return false;
}

public void gotFocus() {


// Fereastra apletului a devenit fereastra activ
System.out.println("gotFocus");
}

public void lostFocus() {


// Fereastra apletului nu mai este fereastra activa
System.out.println("lostFocus");
}

public boolean keyDown(Event e, int x) {


// S-a apsat o tasta i aceasta
// este destinata apletului
System.out.println("keyDown");
return true;
}
}
Putei rula apletul de mai sus pentru a vedea care este ordinea n care sunt apelate aceste metode de
ctre navigator. Apletul de mai sus produce ieiri la consol (o fereastr text) i nu n fereastra apletului.
Dac nu vedei consola, ncercai s cutai prin meniurile navigatorului opiunea de afiare a consolei Java.
Din cele spuse pn acum se poate deduce c apleturile Java nu au o via proprie, ele fiind doar
apelate din cnd n cnd de navigator. Ceea ce nu este ntocmai adevrat pentru c biblioteca standard de
clase Java ofer suport pentru aplicaii care folosesc mai multe fire de execuie. Apleturile pot astfel crea
fire de execuie care s lucreze independent fa de navigator.

Eticheta (tagul) APPLET


Descrierea tagului pe care Sun l-a definit pentru introducerea unui aplet ntr-un document HTML
este urmtoarea.

< APPLET
[CODEBASE = codebaseURL]
CODE = appletFile
[ALT = alternateText]
[NAME = appletInstanceName]
WIDTH = pixels
HEIGHT = pixels
[ALIGN = alignment]
[VSPACE = pixels]
[HSPACE = pixels]
>
[< PARAM NAME = appletParameter1 VALUE = value >]
[< PARAM NAME = appletParameter2 VALUE = value >]
...
[alternateHTML]
</APPLET>
CODEBASE = codebaseURL
Acest atribut opional specific URL-ul de baz al appletului directorul (folderul) care conine
codul apletului. Dac acest atribut nu este utilizat atunci se consider directorul curent al
documentului html.
CODE = appletFile
Acest atribut este obligatoriu i specific numele fiierului care conine forma compilat a
appletului (clasa). Acest atribut este relative la URL ul de baz.
Dac codul clasei este n acelai director cu documentul HTML este suficient s fie specificat
atributul CODE cu numele fiierului unde este acesta memorat. Dac este nevoie de un director diferit,
trebuie completat i atributul CODEBASE n care se menioneaz directorul. De exemplu, dac fiierele
.class sunt ntr-un subdirector numit /clase al directorului care conine documentul HTML, atunci exemplul
de mai sus devine:
<APPLET CODE="HelloWorldApplet.class" CODEBASE="clase"
WIDTH=200 HEIGHT=150>
Text care apare dac navigatorul nu tie Java
</APPLET>

ALT = alternateText
Acest atribut opional specific un text care trebuie s fie afiat dac browserul nelege atributul
APPLET dar nu tie s execute appleturi Java.

NAME = appletInstanceName
Este un atribut opional care specific un nume pentru instana apletului, care face posibil
comunicarea ntre apleturile din aceeai pagin.
WIDTH = pixels
HEIGHT = pixels
Aceste dou attribute opionale specific dimensiunile (n pixeli) ale ferestrei (zonei de afiare) ale
appletului.
ALIGN = alignment
Atributul ALIGN specific modul n care fereastra destinat apletului va fi aliniat n pagin. Valorile
sale posibile sunt: LEFT, RIGHT, TOP, TEXTTOP, MIDDLE, ABSMIDDLE, BASELINE, BOTTOM i
ABSBOTTOM. Valoarea implicit este BASELINE.
LEFT, RIGHT - alinierea va fi n stnga, respectiv dreapta, textului din linie.
TOP - alinierea se va face cu elementul cel mai nalt din linie, fie el un alt aplet, o imagine sau
textul nsui.
TEXTTOP - alinierea se face cu cea mai nalt poziie ocupat de textul liniei.
ABSMIDDLE - mijlocul apletului va fi aliniat cu mijlocul elementului cel mai mare din linie.
MIDDLE - mijlocul apletului se va alinia cu mijlocul liniei de baz a textului.
BASELINE, BOTTOM - baza apletului se va alinia cu linia de baz a textului.
ABSBOTTOM - baza apletului va fi aliniat cu elementul cel mai de jos din linie.

VSPACE = pixels
HSPACE = pixels
Atributele VSPACE i HSPACE specific, n pixeli, spaiul care desparte apletul de textul care l
nconjoar. Sunt atribute opionale.

< PARAM NAME = appletParameter1 VALUE = value >


Eticheta <PARAM> este singura modalitate prin care unui applet i se pot transmite parametrii.
Appletul preia aceti parametrii cu ajutorul metodei getParameter(), aa cum s-a artat mai sus.
alternateHTML
Dac pagina html care conine eticheta APPLET este vizualizat cu ajutorul unui browser care nu
nelege aceast etichet, atunci browserul va ignora cele dou etichete APPLET i TAG .
Browserele compatibile Java vor ignora acest cod.
Atributele obligatorii ale acestei definiii sunt numele fiierului n care este memorat codul i
dimensiunea spaiului rezervat apletului. Minimal, tag APPLET arat n felul urmtor:
<APPLET CODE="HelloWorldApplet.class" WIDTH=200 HEIGHT=150>
Text care apare dac navigatorul nu tie Java
</APPLET>
Atributele opionale ale tagului descriu locaia de baz a codului apletului, modul de aliniere n
pagin, spaierea i eventualii parametrii care pot fi transmii apletului din interiorul documentului HTML.

Structura programelor
Pachete de clase
Clasele Java sunt organizate pe pachete. Aceste pachete pot avea nume ierarhice. Numele de
pachete au forma urmtoare:

[NumePachet.] NumeComponentPachet
Numele de pachete i de componente ale acestora sunt identificatori Java. De obicei, aceste nume
urmeaz structura de directoare n care sunt memorate clasele compilate. Rdcina arborelui de directoare
n care sunt memorate clasele este indicat de o variabil sistem CLASSPATH. n DOS aceasta se seteaz
n felul urmtor:
set CLASSPATH=.;c:\java\lib
Din aceast rdcin, fiecare pachet are propriul director. n director exist codul binar pentru
componentele pachetului respectiv. Dac pachetul conine subpachete, atunci acestea sunt memorate ntr-un
subdirector n interiorul directorului pachetului.
Creatorii Java recomand folosirea unei reguli unice de numire a pachetelor, astfel nct s nu apar
conflicte. Convenia recomandat de ei este aceea de a folosi numele domeniului Internet aparinnd
productorului claselor. Astfel, numele de pachete ar putea arta ca n:
COM.Microsoft.OLE
COM.Apple.quicktime.v2
i aa mai departe.

Importul claselor
Este nevoie ca o clas s poat folosi obiecte aparinnd unei alte clase. Pentru aceasta, definiia
clasei respective trebuie s importe codul binar al celeilalte clase pentru a ti care sunt variabilele i
metodele clasei respective.
Importul se face cu o instruciune special:

import numeClas ;

unde numele clasei include i pachetul din care aceasta face parte. De exemplu:
import java.awt.Graphics;
import java.applet.Applet;
Se poate importa i un pachet ntreg, adic toate clasele aparinnd acelui pachet, printr-o instruciune de
forma:

import numePachet.*;

De exemplu:

import java.awt.*;

Fiiere surs
Codul surs Java trebuie introdus cu un editor ntr-un fiier text pe care l vom numi n continuare
fiier surs. Un fiier surs poate s conin declaraia mai multor clase i interfee, dar doar una dintre
acestea poate fi declarat public. Utilizarea celorlalte clase este limitat la fiierul respectiv. Mai mult, nu
putem avea n acelai timp o interfa public i o clas public declarate n acelai fiier surs.
Dac dorim s nregistrm codul clasei ntr-un anumit pachet, putem s includem la nceputul fiierului
surs o declaraie de forma:

package numePachet;

dac aceast declaraie lipsete, clasa va fi plasat n pachetul implicit, care nu are nume.
Structura general a unui fiier surs este urmtoarea:
[ DeclaraiePachet ][ InstruciuneImport ][ DeclaraieDeTip ]

unde declaraia de tip poate fi o declaraie de clas sau de interfa.

Compilare i execuie
Fiierele surs Java au obligatoriu extensia .java. Numele lor este identic cu numele clasei sau
interfeei publice declarate n interior. n urma compilrii rezult fiiere cu nume identice cu numele
claselor dar cu extensia .class indiferent dac este vorba de o clas sau o interfa. Fiierul .class este generat
n directorul local i nu direct la locaia pachetului.
Compilarea se face cu o comand de forma:
javac FiierSurs.java
Comanda aceasta, ca i celelalte descrise n acest paragraf este specific mediului de dezvoltare
Java pus la dispoziie de Sun, numit JDK (Java Development Kit). Exist ns i multe alte medii de
dezvoltare care au propriile lor compilatoare i interpretoare.
La compilare, variabila sistem CLASSPATH trebuie s fie deja setat pentru c nsui compilatorul
Java actual este scris n Java.
Pentru lansarea n execuie a unei aplicaii Java, trebuie s introducei comanda:
java NumeClas
unde numele clasei este numele aplicaiei care conine metoda main . Interpretorul va cuta un fiier cu
numele NumeClas.class i va ncerca s instanieze clasa respectiv.
Pentru lansarea unui aplet vei avea nevoie de un document HTML care conine tagul APPLET i ca
parametru al acesteia
name=NumeClas.class
La lansarea unui aplet, clasele care sunt apelate de clasa principal sunt mai nti cutate pe sistemul pe
care ruleaz navigatorul. Dac nu sunt acolo, ele vor fi transferate n reea. Asta nseamn c transferul de
cod este relativ mic, trebuie transferat doar codul specific aplicaiei.

Eticheta <OBJECT>

Eticheta <APPLET> este o extensie HTML introdus special pentru a insera programe Java n
paginile Web. In prezent exist i alte tipuri de programe care ruleaz interactiv ntr-o pagin, cum ar fi
controale ActiveX. Pentru a trata toate aceste tipuri de programe fr a fi nevoie de cte o etichet explicit
pentru fiecare, specificaia HTML a introdus i eticheta <OBJECT>.
Eticheta <OBJECT> este folosit pentru toate obiectele - programe interactive sau alte elemente externe -
care pot fi prezentate drept parte a paginii Web. Aceast etichet este suportat ncepnd de la versiunile 4.0
ale Netscape Navigator sau Microsoft Internet Explorer. Browserele mai vechi nu suport aceast nou
etichet, aa nct n multe cazuri va trebui s folosii tot eticheta <APPLET>.
Eticheta <OBJECT> are urmtoarea form:

<OBJECT CLASSID="java:Bix.class" CODEBASE="javaclasses* HEIGHT=40 WIDTH=400>


</OBJECT>

Trecerea de la eticheta <APPLET> la <OBJECT> presupune urmtoarele modificri:


Eticheta <OBJECT> trebuie folosit n loc de <APPLET>
Atributul CODE trebuie nlocuit de CLASSID. n plus, nainte de numele clasei applet-ului trebuie
specificat "java:". De exemplu, dac applet-ul are clasa AppletJoc.class, atunci atributul CLASSID
trebuie s fie java: AppletJoc.class.
n rest, atributele (CODEBASE, HEIGHT, WIDTH, ALIGN) rmn aceleai. <OBJECT> poate folosi i
etichetele opionale <PARAM>.

Arhive Java
Modalitatea standard de amplasare a unui applet Java ntr-o pagin Web este de a folosi etichetele
<APPLET> sau <OBJECT> pentru a indica numele clasei primare a applet-ului. Se folosete apoi un browser
compatibil Java, care transfer i execut applet-ul. Orice alte clase sau fiiere folosite de applet sunt
transferate de pe serverul Web.
Problema cu rularea n acest fel a applet-urilor este c fiecare fiier de care are nevoie applet-ul - fie acesta
o alt clas extern, un fiier imagine, audio, text sau orice altceva -necesit o conexiune separat de la
browserul Web la serverul care conine fiierul. Deoarece intervalul de timp necesar pentru a stabili
conexiunea nu este neglijabil, acest lucru poate mri timpul total pentru transferul applet-ului i al celorlalte
fiiere necesare pentru rulare.
Soluia acestei probleme este crearea unui arhive Java, adic un fiier JAR. 0 arhiv Java reprezint o
colecie de clase Java i alte fiiere, mpachetat ntr-un singur fiier. Folosind o arhiv Java, browserului i
este suficient o singur conexiune la serverul Web. Reducnd numrul de fiiere transferate de pe server,
applet-ul poate fi ncrcat i rulat mai rapid. Arhivele Java pot fi i comprimate, sczndu-le astfel
dimensiunea i micorndu-se timpul de transfer - chiar dac va mai dura puin din partea browserului s le
decomprime nainte de a le rula.
Versiunile de Netscape Navigator i Microsoft Internet Explorer ncepnd cu 4.0 conin suport pentru
fiiere JAR. Pentru a crea aceste arhive, JDK conine un utilitar denumit jar, care poate mpacheta sau
despacheta fiierele n/din arhive Java. Fiierele JAR pot fi comprimate n format Zip sau mpachetate fr a
folosi comprimarea. Urmtoarea comand mpacheteaz toate clasele i imaginile GIF dintr-un director
ntr-o singur arhiv Java, denumit Animat.jar:
jar cf Animat.jar *.class *.gif
Argumentul cf specific dou opiuni n linie de comanda, care sunt folosite de programul jar. Opiunea c
indic faptul c arhiva Java trebuie creat, iar f arat c unul dintre urmtoarele argumente din linia de
comand reprezint numele fiierului arhiv.
Putei, de asemenea, aduga ntr-o arhiv Java alte fiiere, folosind o comand de genul:
jar cf Smiley.jar ShowSmiley.class ShowSmiley.html spinhead.gif
Aceasta creeaz o arhiv Java cu numele Smiley.jar, care conine trei fiiere:
ShowSmiley.class, ShowSmiley.html i spinhead.gif.
Rulnd utilitarul jar fr argumente, vei obine lista de opiuni care pot fi folosite.
Dup ce ai creat arhiva Java, n eticheta <APPLET> se folosete atributul ARCHIVE pentru a indica locul
unde se gsete arhiva. Putei folosi arhiva Java n felul urmtor:
<APPLET CODE="ShowSmiley.class" ARCHIVE="Smiley.jar" WIDTH=45 HEIGHT =42>
</APPLET>
Aceast etichet specific faptul c arhiva numit Smiley.jar conine fiierele folosite de applet. Browserele
i utilitarele de navigare care suport fiiere JAR tiu s caute n interiorul arhivelor fiierele necesare pe
timpul rulrii applet-ului.

Atenie
Cu toate c o arhiv Java poate conine fiiere clas, atributul ARCHIVE nu presupune eliminarea
atributului CODE. Pentru a o ncrca, browserul trebuie totui s tie numele clasei principale a applet-ului.

Transferul de parametri ctre applet-uri


n aplicaiile Java putei transmite parametri metodei main ( ) specificnd argumente n linia de comand.
Apoi putei prelucra aceti parametri n corpul clasei, aplicaia comportndu-se corespunztor argumentelor
primite.
n schimb, applet-urile nu posed o linie de comand. Applet-urile pot obine diferite date de intrare
din fiierul HTML care conine eticheta <APPLET> sau <OBJECT>, folosind parametri de applet-uri. Pentru a
defini i a trata parametri ntr-un applet avei nevoie de dou lucruri:
etichet special de parametru n fiierul HTML
Codul din cadrul applet-ului care s trateze aceti parametri
Parametrii unui applet sunt compui din dou pri: un nume, care este ales de dumneavoastr, i o valoare,
care determin valoarea respectivului parametru. De exemplu, putei indica ntr-un applet culoarea unui text
folosind un parametru cu numele culoare i valoarea rou. Putei determina viteza de derulare a unei
animaii folosind un parametru cu numele viteza i valoarea 5.
n fiierul HTML care conine applet-ul, fiecare parametru este indicat folosind eticheta
<PARAM> , care conine dou atribute, pentru nume i valoare, denumite NAME i VALUE. Eticheta
<PARAM> se introduce ntre etichetele <APPLET> de nceput i de sfrit, ca n exemplul:

<APPLET CODE="Exemplu.class" WIDTH=100 HEIGHT=100>


<PARAM NAME=font VALUE="TimesRoman">
<PARAM NAME=dim VALUE="24">
Aici este inserat un applet Java.
</APPLET>

Acest exemplu definete doi parametri pentru applet-ul Exemplu: unul, denumit font, care are valoarea
TimesRoman, i cellalt, denumit dim, care are valoarea 24.
Folosirea etichetei <PARAM> este aceeai pentru applet-urile care folosesc eticheta <OBJECT> n loc de
<APPLET>.
Parametrii sunt transmii applet-ului la ncrcarea acestuia. n metoda init() a applet-ului putei obine
aceti parametri folosind metoda getParameter(). Aceasta preia ca argument un ir ce reprezint numele
parametrului cutat i ntoarce un ir care conine valoarea respectivului parametru. (Ca i argumentele
aplicaiilor Java, toate valorile parametrilor sunt returnate drept iruri.) Pentru a obine valoarea
parametrului font din fiierul HTML, metoda init() ar trebui s conin ceva de genul:
String numeleFontului = getParameter("font");

Observaie

Numele parametrilor specificai n eticheta <PARAM> i numele parametrilor metodei getParameter ()


trebuie s fie identice, inclusiv majusculele sau minusculele folosite. Cu alte cuvinte, <PARAM
NAME="meminescu"> este diferit de <PARAM NAME="MEminescu">. Dac parametrii dumneavoastr
nu sunt transferai corect applet-ului, asigurai-v c au folosit acelai tip de caractere (majuscule sau
minuscule) n denumirea parametrilor.

Reinei c dac parametrul ateptat nu a fost specificat in fiierul HTML, metoda getParameter()
ntoarce valoarea null. De obicei, ar trebui sa testai valoarea null a parametrului si sa oferii o valoare
implicit, ca in exemplul urmtor:
if (numeleFontului == null)
numeleFontului = "Courier";
inei minte ca metoda getParameter () returneaz iruri; dac dorii ca parametrul sa fie alt tip de obiect
sau de data, trebuie sa l convertii singur. De exemplu, sa luam fiierul HTML pentru applet-ul Exemplu.
Pentru a trata parametrul dim si a-l atribui unei variabile ntregi, numit dimensiunea, ai putea folosi
urmtorul cod:
int dimensiunea;
String s = getParameter("dim");
if (s == null)
dimensiunea = 12;
else dimensiunea = Integer.parseInt(s);
S cream un exemplu de applet care folosete aceast tehnic. Vom crea un applet Palindrom pentru a afia
alte texte, cum ar fi ,,Dennis and Edna sinned" sau ,,No, sir, prefer prison". Numele este transmis applet-
ului printr-un parametru HTML. Proiectul va primi numele Palindrom.

import java.awt.Graphics;
import java.awt.Font;
import java.awt.Color;
public class Palindrom extends java.applet.Applet {
Font f = new Font ("TimesRoman", Font.BOLD, 36);
String palindrom;

public void paint(Graphics ecran) {


ecran.setFont(f);
ecran.setColor(Color.red);
ecran.drawString(palindrom, 5, 40);
}

public void init() {


palindrom = getParameter("palindrom");
if (palindrom == null)
palindrom = "Dennis and Edna sinned";
}
}
Fiierul HTML care va conine acest applet este urmtorul

<HTML>
<HEAD>
<TITLE>Pagina cu palindrom</TITLE>
</HEAD>
<BODY>
<P>
<APPLET CODE=Palindrom.class" WIDTH=600 HEIGHT=100>
<PARAM NAME=palindrom VALUE="No, sir, prefer prison">
Browserul dumneavoastr nu suporta Java!
</APPLET>
</BODY>
</HTML>

Remarcai eticheta <APPLET>, care desemneaz fiierul clas pentru applet i valorile pentru lime i
nlime (600, respectiv 100 de pixeli). Imediat sub aceast linie (n linia 8) se afl eticheta <PARAM>,
care este folosit pentru a transmite parametrul applet-ului. n acest exemplu, numele parametrului este
palindrom, iar valoarea sa este irul No, sir, prefer prison".
Dac nu este specificat nici o valoare pentru parametrul palindrom, textul implicit este Dennis and Edna
sinned".
Urmtorul fiier HTML nu conine nici o etichet de parametru
<HTML>
<HEAD>
<TITLE>Noua pagina cu palindrom</TITLE>
</HEAD>
<BODY>
<P>
<APPLET CODE="PalindromNou.class" WIDTH=600 HIGHT=100>
Browserul dumneavoastr nu suporta Java!
</APPLET>
</BODY>
</HTML>
Deoarece aici nu a fost specificat nici un parametru, applet-ul va folosi valoarea implicit.

S-ar putea să vă placă și