PDA

Visualizza la versione completa : [java] thread & applet


guylmaster
22-02-2005, 21:48
Ho appena finito di studiarmi il manuale del java e non mi sono chiare alcune cose dei due argomenti del titolo.

Inanzi tutto riguardo agli applet. Quali elementi posso utilizzare per avere un output in essa? solo gli elementi graphics (http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/plaf/basic/BasicGraphicsUtils.html)?
Altrimenti che altro posso utilizzare?

A riguardo degli applet sapete linkarmi una guida che ne spiegi le varie funzioni? (anche in inglese va bene).

Un altro argomento è quello dei thread, gli ho visti utilizzare sia con l'extends TimerTask tramite la definizione "private Timer timer = new Timer();" e gli ho visti utilizzati in un esempio di applet tramite l'implements Runnable con la definizione "private Thread updateThread;".

Quello che vorrei sapere io qual'è la definizione generale? mi potreste fare un esempio di codice funzionante di un thread che tramite schedule esegua un determinato pezzo di codice ogni tot secondi?

Anche per i thread potreste linkarmi una buona guida (anche in inglese) in modo da approfondirli?

Un altra cosa, sapete se esiste un sito contenente i sorgenti di programmi più o meno semplici in java che utilizzino funzioni di vario genere e che siano commentati? perchè vorrei studiarmi un pò di programmi già esistenti per consolidare le mie conoscenze (in particolare mi interessava qualcosa sui socket et simila..)

Vi ringrazio in anticipo,
Guylmaster.

LeleFT
23-02-2005, 10:40
Per quanto riguarda le guide che cerchi, credo che la documentazione Java sia la risorsa più importante e completa che tu possa trovare. Basta andare qui: http://java.sun.com/j2se/1.4.2/docs/api

Per avere un output su di un'applet, puoi utilizzare qualsiasi elemento grafico: Label innanzitutto, TxtArea, TextField... trovi tutto sulla documentazione linkata prima.

Per avere ulteriori guire/manuali/libri, puoi affidarti sempre alla rete: trovi un sacco di manuali e libri, tra cui spiccano "MokaBook" (www.mokabyte.it), "Java, mattone dopo mattone" (cerca con Google), "Thinking in Java" (anche questo lo trovi con Google). Li puoi tutti scaricare liberamente e gratuitamente (quello di MokaByte richiede una registrazione gratuita, ma è ottimo).

Esempi di codice Java ne trovi fin che vuoi su internet. Anche qui, Google e la tua fantasia trovano l'impossibile.

Per i Thread, ci sono tanti modi per crearli. Alcuni li hai già visti da solo, ma credo che il modo più semplice, intuitivo e veloce sia quello di estendere direttamente la classe Thread. Un esempio, che scrive un numero a caso ogni 5 secondi (e termina dopo 20 secondi) è il seguente:


public class NumeriACaso extends Thread {

public NumeriACaso() {

/* Questo metodo rappresenta ciò che verrà eseguito dal Thread.
* Basta sottoporlo ad override, come in questo esempio, ed
* il gioco è fatto.
*/
public void run() {
int timer = 0;
try {
while (timer < 20) {
sleep(5000);
System.out.println( Math.random() );
timer += 5;
}
} catch (InterruptedException ie) { ie.printStackTrace(); }
}

public static void main(String [] args) {
NumeriACaso nac = new NumeriACaso();
nac.start();
}
}

In alternativa, per avere pezzi di codice, puoi utilizzare la ricerca di questo forum. Ne trovi a bizzeffe, sopratutto per quanto riguarda l'utilizzo delle Socket.


Ciao. :ciauz:

guylmaster
23-02-2005, 17:07
Originariamente inviato da LeleFT
Per quanto riguarda le guide che cerchi, credo che la documentazione Java sia la risorsa più importante e completa che tu possa trovare. Basta andare qui: http://java.sun.com/j2se/1.4.2/docs/api

Per avere un output su di un'applet, puoi utilizzare qualsiasi elemento grafico: Label innanzitutto, TxtArea, TextField... trovi tutto sulla documentazione linkata prima.

Per avere ulteriori guire/manuali/libri, puoi affidarti sempre alla rete: trovi un sacco di manuali e libri, tra cui spiccano "MokaBook" (www.mokabyte.it), "Java, mattone dopo mattone" (cerca con Google), "Thinking in Java" (anche questo lo trovi con Google). Li puoi tutti scaricare liberamente e gratuitamente (quello di MokaByte richiede una registrazione gratuita, ma è ottimo).

Esempi di codice Java ne trovi fin che vuoi su internet. Anche qui, Google e la tua fantasia trovano l'impossibile.

Per i Thread, ci sono tanti modi per crearli. Alcuni li hai già visti da solo, ma credo che il modo più semplice, intuitivo e veloce sia quello di estendere direttamente la classe Thread. Un esempio, che scrive un numero a caso ogni 5 secondi (e termina dopo 20 secondi) è il seguente:


public class NumeriACaso extends Thread {

public NumeriACaso() {

/* Questo metodo rappresenta ciò che verrà eseguito dal Thread.
* Basta sottoporlo ad override, come in questo esempio, ed
* il gioco è fatto.
*/
public void run() {
int timer = 0;
try {
while (timer < 20) {
sleep(5000);
System.out.println( Math.random() );
timer += 5;
}
} catch (InterruptedException ie) { ie.printStackTrace(); }
}

public static void main(String [] args) {
NumeriACaso nac = new NumeriACaso();
nac.start();
}
}

In alternativa, per avere pezzi di codice, puoi utilizzare la ricerca di questo forum. Ne trovi a bizzeffe, sopratutto per quanto riguarda l'utilizzo delle Socket.


Ciao. :ciauz:


Grazie mille, appena ho un pò di tempo provo un pò delle cose che mi hai dato e ti dico.

Volevo chiederti una cosa riguardo alle applet, tenendo conto che come ti ho già datto non ho dato ancora uno sguardo alle guide: Ho creato questo programma che sfrutta gli elementi JTextField e JLabel modificando un esempio del libro ma come risultato mi da una pagina bianca. In cosa sbaglio? sicuramente sbaglio qualcosa ma cosa? devo creare anche nell'applet la nonrmale JFrame e fare il classico Show della finestra?

Attendo info :)

Grazie mille,
Guylmaster.




import java.awt.Graphics;
import java.io.PrintStream;
import javax.swing.*;

public class applet extends JApplet
{

public applet()
{
}

public void paint(Graphics g)
{
}

public void init()
{
byte byte0 = 40;
System.out.println("prova");
JTextField jtextfield = new JTextField(byte0);
JLabel jlabel = new JLabel("scritta");
add(jtextfield);
add(jlabel);
}
}

LeleFT
23-02-2005, 18:21
Questo è il codice funzionante. Se non hai nessuna intenzione di riscrivere il metodo paint() e nel costruttore non fai nulla, puoi anche non scriverli. Anzi, se non hai intensione di ridefinire il metodo paint() non lo devi inserire, altrimenti non ti visualizza nulla. Inoltre non ho capito perchè hai importato l'oggetto PrintStream del package java.io se poi non hai usato nessun oggetto (che tra l'altro non puoi utilizzare all'interno di un'applet, in modo così semplice).
Se volevi riferirti al System.out.println(), la classe System fa parte del package java.lang che viene importato per default sempre.


import javax.swing.*;

public class applet extends JApplet
{

private JTextField jtextfield;
private JLabel jlabel;

public void init()
{
byte byte0 = 40;
System.out.println("prova");
jtextfield = new JTextField();
jlabel = new JLabel("scritta");
getContentPane().setLayout( new java.awt.GridLayout(2, 1) );
getContentPane().add(jtextfield);
getContentPane().add(jlabel);
}
}

Ciao. :ciauz:

guylmaster
23-02-2005, 18:57
Originariamente inviato da LeleFT
Questo è il codice funzionante. Se non hai nessuna intenzione di riscrivere il metodo paint() e nel costruttore non fai nulla, puoi anche non scriverli. Anzi, se non hai intensione di ridefinire il metodo paint() non lo devi inserire, altrimenti non ti visualizza nulla. Inoltre non ho capito perchè hai importato l'oggetto PrintStream del package java.io se poi non hai usato nessun oggetto (che tra l'altro non puoi utilizzare all'interno di un'applet, in modo così semplice).
Se volevi riferirti al System.out.println(), la classe System fa parte del package java.lang che viene importato per default sempre.


import javax.swing.*;

public class applet extends JApplet
{

private JTextField jtextfield;
private JLabel jlabel;

public void init()
{
byte byte0 = 40;
System.out.println("prova");
jtextfield = new JTextField();
jlabel = new JLabel("scritta");
getContentPane().setLayout( new java.awt.GridLayout(2, 1) );
getContentPane().add(jtextfield);
getContentPane().add(jlabel);
}
}

Ciao. :ciauz:

Anche con il tuo esempio non mi visualizza nessun oggetto, di nuovo un rettangolino bianco.. eppure il codice me lo hai scritto tu.

Per richiamarlo uso il seguente codice ma non credo di aver sbagliato nulla qui:



<applet code="applet.class"
width=200 height=40
>
</applet>


P.S: Poi per i thread sono riuscito a capire senza troppi problemi, MokaBook lo conoscevo già.

Andrea1979
23-02-2005, 19:18
un rettangolo bianco?
Sei sicuro di avere la JVM installata? Fai una prova: vai su

www.java.com

e vedi se riesci a vedere la tazza di caffè sulla destra.

Se non la vedi potrebbe essere sintomo di una non corretta installazione. Clicka sul link di download e segui le istruzioni.

Se invece stai usando internet explorer e hai già visitato pagine con applet e tutto apparentemente funziona, allora potresti avere installata la JVM di Microsoft, che non è quella ufficiale (e di cui tra l'altro, se non sbaglio, è stata sospesa l'aggiornamento PRIMA dell'introduzione di swing, per cui una JApplet non verrà mai e poi mai caricata dalla virtual machine di microsoft). In questo caso la scelta sta a te: ho installi la nuova JVM, ufficiale e regolarmente patchata, quindi più sicura, oppure cambi browser e ci installi la JVM solo per quel browser.
:ciauz:

guylmaster
23-02-2005, 19:25
Originariamente inviato da Andrea1979
un rettangolo bianco?
Sei sicuro di avere la JVM installata? Fai una prova: vai su

www.java.com

e vedi se riesci a vedere la tazza di caffè sulla destra.

Se non la vedi potrebbe essere sintomo di una non corretta installazione. Clicka sul link di download e segui le istruzioni.

Se invece stai usando internet explorer e hai già visitato pagine con applet e tutto apparentemente funziona, allora potresti avere installata la JVM di Microsoft, che non è quella ufficiale (e di cui tra l'altro, se non sbaglio, è stata sospesa l'aggiornamento PRIMA dell'introduzione di swing, per cui una JApplet non verrà mai e poi mai caricata dalla virtual machine di microsoft). In questo caso la scelta sta a te: ho installi la nuova JVM, ufficiale e regolarmente patchata, quindi più sicura, oppure cambi browser e ci installi la JVM solo per quel browser.
:ciauz:

No uso FireFox e l'applet parte e solo che mostra solo una finestra bianca.
Su Ie invece come hai detto tu non parte propio e visualizza una x rossa su sfondo grigio.

Per la tazza di caffè comunque intendevi quella nella barra degli strumenti? se è quella me ne appare una ogni volta che lancio un applet o un qualsiasi programma java.

In ogni caso.. se visualizza lo sfondo bianco significa che parte, allora perchè lo sfondo e bianco? non dovrebbe visualizzare una scritta + un campo stile form? a te lo fa?

Andrea1979
23-02-2005, 19:33
no, io la vedo correttamente :bhò:

Nel mio caso, l'applet è 300 per 300

LeleFT
23-02-2005, 19:37
Io l'ho provata con AppletViewer... basta che vai al prompt dei comandi, nella posizione dove hai il file .html che dovrebbe far partire l'applet e digiti la seguente riga di codice:


appletviewer nomefile.html

appletviewer è un comando messo a disposizione dalla JDK che serve a visualizzaer le applet senza dover avviare il browser. Molto utile quando il browser non è configurato per adoperare la JRE della Sun, ma la Microsoft VM (per default).


Ciao. :ciauz:

guylmaster
23-02-2005, 19:39
Originariamente inviato da Andrea1979
no, io la vedo correttamente :bhò:

Nel mio caso, l'applet è 300 per 300

Umm in questo caso visto che anch'io uso Mozilla FireFox, non è che mi passi il link per scaricare la JVM per quel browser? ancora l'ho installata male o ci vuole una versione aggiornata non so.

Loading