Newsgroup: it.comp.java
Titolo: aiuto Applet e Thread

Ho un applet che deve periodicamente eseguire un CGI e inviare dei
messaggi di aggiornamento ad altri applet.
L'applet e' costruito secondo gli esempi nel tutorial sul sito Sun cioe'
-  implements Runnable
-  ha un metodo start siffatto
  public void start() {
  if (myThread == null) {
     myThread = new Thread(this);
     System.out.print("starting thread ");
     System.out.println(myThread.toString());
     }
  myThread.start();
   }
  (DOMANDA : il myThread.start(); deve stare dentro o fuori l'IF ?
   sul tutorial Sun vi sono due esempi contraddittori, quello sui thread
   lo ha dentro, quello sugli applet lo ha fuori
- un metodo stop che mette soltanto myThread = null;
- un metodo run che fa un loop
     Thread currentThread = Thread.currentThread();
     while (currentThread == myThread) {
     System.out.print("running thread ");
     System.out.println(currentThread.toString());
     ... qui poi invoca il CGI e ne processa l'output
     myTimes = myTimes + 1 ;
     showStatus("waiting for update");
     try {
         Thread.sleep(60000);
         showStatus("resuming");
         } catch (InterruptedException e) {
           break;
         }
    }
Tutto cio' funziona benissimo con l'appletviewer Sun, e con il browser
hotjava di Sun, ma ha un problema con Netscape (sempre su Sun Solaris),
ossia pare che ci sia un thread in piu'.
Questo e' quello che esce sulla java console (nel caso netscape, negli
altri casi c'e' un thread solo) indica che PARTONO DUE THREAD !!!
starting thread Thread[Thread-2,5,applet-mySender.class]
running thread Thread[Thread-2,5,applet-mySender.class]
starting CGI script
starting thread Thread[Thread-3,5,applet-mySender.class]
running thread Thread[Thread-3,5,applet-mySender.class]
starting CGI script
CGI script returned
blabla
CGI script returned
blabla
la sequenza dei messaggi non e' esattamente ripetibile. Il "blabla" di
cui sopra sono i messaggi del metodo run quando processa l'output del
CGI e NON sono sempre presenti per entrambi i thread. A volte per uno
dei due mancano.
nel seguito a ogni riesecuzione (a ogni minuto) del metodo run risulta
che gira solo il secondo thread
running thread Thread[Thread-3,5,applet-mySender.class]
Il primo thread nel frattempo e' crashato con un messaggio di errore che
non e' sempre quello, puo' essere 
p.es
.
# Applet exception: trying to call size()I
java.lang.NullPointerException: trying to call size()I at
netscape.applet.MozillaAppletContext.getApplet(MozillaAppletContext.java:195)
* at mySender.toggler(mySender.java:159)
  at mySender.run(mySender.java:123)
  at java.lang.Thread.run(Thread.java:504)
o un altro simile (il metodo toggler e' chiamato da run per inviare
messaggi ad altri applet in dipendenza dai risultati del CGI)
oppure puo' dire che il thread viene killato per inattivita' dopo 30
sec.
In tutti i casi sulla status line di Netscape (al posto dei messaggi
che invio io con showStatus, appare un messaggio del tipo 100% of 2K
(stalled) o 100% of 2K in xx sec, come se stesse aspettando qualcosa dal
thread defunto.
DOMANDA : come si fa a prevenire la creazione del thread inutile (il
primo direi), o a farlo terminare immediatamente ?
-- 
----------------------------------------------------------------------
nos...@ifctr.mi.cnr.it
 is a newsreading account used by more persons to
avoid unwanted spam. Any mail returning to this address will be rejected.
Users can disclose their e-mail address in the article if they wish so.

Riposto un riassunto di precedente posting del 30 scorso a cui nessuno
ha risposto (non e' uscito dal server, o nessuno lo sa ?) :
Ho un applet che esegue un thread secondo le specifiche canoniche degli
esempi nel tutorial sul sito Sun.
Esso gira benissimo (crea un singolo thread) con l'appletviewer Sun, e
con il browser hotjava di Sun, ma con Netscape (sempre su Sun Solaris),
invece PARTONO DUE THREAD !!!
Dopo di che a seconda delle circostanze uno dei due muore, crasha,
oppure resta vivo in parallelo all'altro.
DOMANDA : come si fa a prevenire la creazione del thread ridondante, o a



caro mio... questa č una domanda degna della sun.. scrivi a loro (in
inglese) e vedrai che qualcosa ti diranno (soprattutto se il codice č
pari-pari preso dal loro sito..)