perchè se lancio un Thread dalla pressione di un JButton, il pulsante e tutto il Jframe si blocca fin quando non termina il tread??
avrei bisogno che almeno il pulsante stop rimanga "attivo" in modo che alla pressione il Thread venga interrotto
ciao
perchè se lancio un Thread dalla pressione di un JButton, il pulsante e tutto il Jframe si blocca fin quando non termina il tread??
avrei bisogno che almeno il pulsante stop rimanga "attivo" in modo che alla pressione il Thread venga interrotto
ciao
....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
-- Chi si accontenta non gode si illude --
Molto probabilmente sbagli a lanciare il thread, perchè l'interfaccia grafica si blocca finche l'evento provocato dalla pressione del bottone non è stato gestito, ovvero finchè non ritorna il metodo che gestisce l'evento. Se tutto resta bloccato significa chenon hai creato un nuovo thread ma stai lvorando nel thread dell'interfaccia grafica.
public void spegni()
{
int a = Integer.valueOf(tempo.getText()).intValue();
Thread t = Thread.currentThread();
t.setName("Thread principale");
t.setPriority(10);
System.out.println("Thread in esecuzione: " + t);
try {
for (int n = a; n > 0; n--) {
System.out.println("" + n);
t.sleep(1000);
}
System.out.println("chiusura di Windows");
}
catch (InterruptedException e) {
System.out.println("Thread interrotto");
}
}
dall'evento del pulsante lancio questo metodo
....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
-- Chi si accontenta non gode si illude --
infatti non crei un nuovo thread...t è il current thread, cioè il thread corrente , quello in cui viene eseguito il metodo spegni che percio resta bloccato...
e come si crea uno nuovo ????
....ma i computer non sono tanto macchine quanto strumenti di ampliamento della mente ed un diverso tipo di mezzo espressivo.
-- Chi si accontenta non gode si illude --
Puoi fare cosi: ti definisci una tua classe MyThread che estende Thread che definisce il comportamento del tuo thread (ciò lo si fa ridefinendo il metodo run() di un thread). Quindi nel metodo spegni istanzi un nuovo MyThread, passandogli nel costruttore il valore a:
Codice PHP:
public void spegni() {
int a = Integer.valueOf(tempo.getText()).intValue();
Thread t = new MyThread(a);
t.start();
}
class MyThread extends Thread{
private int a;
public MyThread(int a){
this.a = a;
t.setName("Nuovo thread creato con valore 'a' pari a: " + a);
t.setPriority(10);
}
public void run(){
System.out.println("Thread in esecuzione: " + this);
try {
for (int n = a; n > 0; n--) {
System.out.println("" + n);
sleep(1000);
}
catch (InterruptedException e) {
System.out.println("Thread interrotto");
}
}
}
![]()
Se poi vuoi avere la possibilità di fermare un thread devi mantenerti un riferimento al thread t che hai creato.