24/03/09 18:09
Il_maca
rieccomi qui a rompre!!
allora, dopo aver imparato da tasx come creare e usare un thread, ora ho la necessità di interromperlo!!
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:
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:
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!!oubt:
allora, dopo aver imparato da tasx come creare e usare un thread, ora ho la necessità di interromperlo!!
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 + " █ ";} 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!!oubt:
aaa