Oppure

Loading
24/03/09 18:09
Il_maca
rieccomi qui a rompre!!:rofl::rofl:
allora, dopo aver imparato da tasx come creare e usare un thread, ora ho la necessità di interromperlo!!:rotfl::rotfl:

    private void ONActionPerformed(java.awt.event.ActionEvent evt) {                                   
        flag++;
        Thread t = new thread(etidata);
        Thread b = new batteria(batteria, etirete);
        if (flag%2==1){
        t.start();
        b.start();
        this.eti3.setText("***");
        }else{

        ?????//istruzione mancante 
        ?????//istruzione mancante

        this.etirete.setText("");
        this.etidata.setText("");
        this.eti2.setText("");
        this.eti3.setText("");
        this.eti4.setText("");
        this.batteria.setValue(0);
        }
    }   


questo è ciò che viene eseguito al cambiamento di stato del jtoggle button!! quando esso è attivato parte la prima parte con la creazione dei thread. quando esso viene premuto di nuovo parte la seconda parte, in cui dovrebbero esserci le due istruzioni per terminare i thread e poi il reset di tutte le label!!

le classi dei thread sono:
package pacchetto;


import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

public class batteria extends Thread {
    JProgressBar batteria;
    JLabel etirete;
    int condizione;

     public batteria(JProgressBar batteria ,JLabel rete) {
        this.batteria = batteria;
        this.etirete = rete;
     }

    public void ferma(){
      condizione = 0;
    }


    @Override
    public void run() {
        int a=100;
        double x;
        
        batteria.setValue(a);
        while(a!=0 || condizione==1){
            try {
                String b="";
                x = Math.random() * 5;
                for (int i=0;i<=x;i++){b = b + " &#9608; ";}
                etirete.setText(b);
                Thread.sleep(50);
                a--;
                batteria.setValue(a);
            } catch (InterruptedException ex) {
                Logger.getLogger(batteria.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
}


}



package pacchetto;


import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JLabel;

public class thread extends Thread {
    JLabel etidata;


     public thread(JLabel etidata) {
        this.etidata = etidata;
     }

    @Override
    public void run() {
        while(true){
        SimpleDateFormat sdf = new SimpleDateFormat("EEEEEEEEE    dd/MM/yyyy     HH:mm:ss");
        this.etidata.setText(sdf.format(new Date()));
        }

}
}



ho provato a mettere t.stop(); oppure t.wait(); o ankora t.suspend(); t.inteerupt();
ma l'unika soluzione è quella di creare nelle classi un metodo per settare una variabile per dare fine al thread!!
io avevo pensato a questo:
package pacchetto;


import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JLabel;

public class thread extends Thread {
    JLabel etidata;
    int a=0;


     public thread(JLabel etidata) {
        this.etidata = etidata;
     }
     public void ferma(){
         a=1;
     }
    @Override
    public void run() {
        while(a==0){
        SimpleDateFormat sdf = new SimpleDateFormat("EEEEEEEEE    dd/MM/yyyy     HH:mm:ss");
        this.etidata.setText(sdf.format(new Date()));
        }

}
}



ma questo non funziona!! non so come fare ad aggiornare il valore di a nel run!!!
nel main devo fare un ulteriore richiamo, ma non come:
Thread t=new thread(etidata);
ma sostitendo alla parola "Thread" il nome della classe che è thread:
thread prova= new thread(etidata);
scusate il casino e la confusione, ma non pensavo di avere questi problemi e ho impostato i nomi come fossero più facili per me e adesso ke devo spiegarli è un casino!!:doubt::hail::hail:
aaa
24/03/09 22:10
lorenzo
scusa ma non capisco dove sia il problema nel mettere la variabile a invece uguale ad 1 magari.

Fatti un metodo pubblico che setta la variabile

public void setA(int a)
{
    this.a = a;
}


in questo modo alla prossima transizione del while il processo si blocca
aaa
25/03/09 14:49
Il_maca
ok funziona!!! grazie infinitamente!!
aaa