pip14.gif (3111 bytes)

Passaggio di parametri:

Nell'esempio precedente (ArcoB) vorremmo potere provare l'applet con varie velocità (cioè diversi sleep time). Una soluzione brutale consiste nel ricopiare il codice, modificare la riga Thread.sleep(10); in, per esempio, Thread.sleep(15); ricompilare e provare. C'è un'altra soluzione che evita di ricompilare e consiste nel considerare il sleep time come un parametro inserito nella pagina HTML. Per modificare il sleep time basterà modificare la pagina web ed aggiornare il browser.

I parametri sono creati col tag <PARAM> e gli attributi NAME e VALUE. Si possono creare più parametri per una stessa applet, ogni parametro deve essere contenuto all'interno dei tag <APPLET> e </APPLET>. Per esempio:

<APPLET CODE="ArcoB.class" width=300 height=250>
<PARAM NAME="sleep" VALUE="10">
</APPLET>

Adesso bisogna trasmettere il parametro all'applet e per questo bisogna aggiungere un pò di codice. Il metodo da usare è getParameter(); questo metodo ritorna ogni parametro sotto forma di stringa, se necessario bisognerà poi riconvertire in un altro formato.

Nel caso specifico:

sString = getParameter("sleep");
s = Integer.parseInt(sString);

a questo punto abbiamo recuperato il parametro sleep in forma int e basta modificare la riga Thread.sleep(10); in Thread.sleep(s);

Ecco il codice completo:

import java.awt.*;
import java.applet.*;

public class ArcoP extends Applet implements Runnable {

int a = 10;
Color colore;
Thread runner;
Image miaIm;
Graphics mioschermo;
int s=10;
String sString;


//init
public void init() {
setBackground(Color.orange);
colore = new Color(0,0,0);
sString = getParameter("sleep");
s = Integer.parseInt(sString);
miaIm = createImage(getSize().width, getSize().height);
mioschermo = miaIm.getGraphics();
}
public void paint (Graphics screen) {
mioschermo.setColor(colore);
mioschermo.fillArc(90,70,100,100,0,a);
screen.drawImage(miaIm, 0, 0, this);
}
//start
public void start() {
if(runner == null) {
runner = new Thread(this);
runner.start();
}
}
//run
public void run() {
Thread thisThread = Thread.currentThread();
while(runner == thisThread) {
if(a < 360) {
a = a+10;
repaint();
}
else {
colore = new Color((int)(Math.random()*256),(int)(Math.random()*256),(int)(Math.random()*256));
repaint();
a = 10;
}
try {
Thread.sleep(s);
} catch(InterruptedException e) { }
}
}
//stop
public void stop() {
if(runner != null) {
runner = null;
}
}
public void update(Graphics screen) {
paint(screen);
}
}

Per provare varie velocità basta modificare il valore di VALUE nella pagina HTML.

 


NOTA:

In realtà i puristi fanno così:

int s;
String sString = getParameter("sleep");
if(sString != null) {
    s = Integer.parseInt(sString);
    }

perchè il metodo parseInt() non funziona con una stringa vuota (se il parametro non è incluso nella pagina web, getParameter() ritorna una stringa vuota)

fleche_retour.gif (1377 bytes)avanti02.gif (9574 bytes)