PDA

Visualizza la versione completa : [JAVA] Ascoltatore KeyEvent


NeGflar
02-11-2005, 14:16
Ciao a tutti, Avrei bisogno, in un programmino java non grafico, di poter uscire premendo un tasto. Il programma esegue delle operazioni ogni tot minuti il tutto dentro un while infinito. Avrei bisogno quindi che alla pressione di un tasto specifico, il successivo controllo del while risulti falso e quindi il programma esca.
Chi mi sa dire qualcosa?
Grazie

floyd
02-11-2005, 14:44
class KeyListener extends Thread {
public void run() {
java.io.InputStream IS = System.in;
try {
int ch = ' ';
while (ch == 'Q') {
ch = IS.read();
}
// codice per terminare il ciclo
} catch (java.io.IOException ioex) {
}
}
}

puoi fare un thread che attende un carattere da tastiera

NeGflar
02-11-2005, 15:44
Dunque, non ho mai usato i thread quindi mi trovo in difficoltà.
Comunque, se un thread si occupa di ricevere caratteri, questo non dovrebbe essere messo in pausa visto che potrei premere il tasto q in qualsiasi momento, e se proprio in quel momento l'avessi messo in pausa per effettuare una qualche operazione dell'altro thread (quello principale del mio programma) non prenderebbe il tasto giusto?
Comunque la situazione in cui mi trovo e' questa:
Il mio programma fa un'operazione ogni 20 minuti e poi va in sleep. In quel momento potrei attivare il thread per ascoltare i caratteri immessi in input. Comunque posso remere "q" solo quando il programma e' in sleep.
In ogni caso ti spiacerebbe scrivere un esempio sommario che ne so, di un programma che ogni 5 minuti incrementa una variabile, va in slepp e poi viene attivato l'ascoltatore?
Grazie

floyd
02-11-2005, 16:40
il programma deve avere uno sleep(20000)
prima di quello fai
KeyListener lis = new KeyListener();
lis.start();
devi aggiungere un controllo nel thread che lo fermi se il programma non dorme
potresti mettere una variabile boolean running e un controllo
while (ch != 'Q' || father.running)
father è un riferimento alla classe principale

NeGflar
02-11-2005, 18:57
Ok, intanto grazie per l'aiuto.
Ho creato il thread e tutto funziona alla perfezione.
C'e' pero' un problema. Quando premo q, il secondo thread, quello che prende in input caratteri, termina e setta una variabile a false per terminare anche il ciclo del primo thread e uscire dal programma. Il problema e' che prima di uscire aspetta il tempo di sleep che avevo impostato (i 20 minuti che ti dicevo prima).
Ho letto un po' in giro e esiste il metodo Thread.interrupt() che dovrebbe risvegliarlo ma non funziona. Come posso risvegliare il thread che ho messo in sleep prima che passi il tempo impostato?
Grazie

NeGflar
02-11-2005, 19:41
Ok ho risolto :)
Grazie ancora

Loading