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.