PDA

View Full Version : [java] partenza e arresto trammite tastiera


Burlindo
30-10-2003, 22:17
Salve a tutti.
Sto programmando un datario con incorporato un orologio e non conosco il medodo da usare per poter far arrestare il ciclo che incrementa il contatore dell'orologio mediante un input da tastiera.
Io per ricevere gli imput da tastiera utilizzo la classe Text di questo pacchetto:
http://dm.unife.it/Linguaggi2/sorgenti/javagently.zip

Per poter fermare il ciclo si potrebbe provare con qualche thread... forse.... dico forse xkè non so cosa usare.

La parte di codice interessata è più o meno così:
while(true)
{
try
{
Thread.sleep(100);//precisione al decimo di secondo
clock.timeTick();
System.out.println(clock.getTime());
}
catch ( InterruptedException e )
{
System.out.println("OPERAZIONE NON ESEGUIBILE") ;
break;
}
}

PGI
31-10-2003, 02:17
Dovresti cambiare quel "while(true)" in un "while(attivo)" dove "attivo" è una variabile "boolean", preferibilmente con accesso pubblico e statico (così da poterla controllare direttamente nel main).
Poi inserisci da qualche parte nel codice una cosa come quella nell'esempio che segue (QueueRaptor non è altro che un ascoltatore di eventi con le orecchie molto lunghe):


public class MainClass {
public static void main(String[] args) {
final int STOP_KEY=KeyEvent.VK_F1;

class QueueRaptor extends EventQueue {
public void dispatchEvent(AWTEvent e) {
if(e.getID()==KeyEvent.KEY_PRESSED &&
((KeyEvent)e).getKeyCode()==STOP_KEY) {
System.exit(0);
}
super.dispatchEvent(e);
}
};
Toolkit.getDefaultToolkit().getSystemEventQueue().push(new QueueRaptor());

new JFrame().show();
}

}


Poi la faccenda va coordinata con il codice sorgente che hai ma l'esempio che ho postato dovrebbe darti un'idea di come intercettare eventi da tastiera con oggetto sorgente non predefinito (cosa che presenta vantaggi e svantaggi naturalmente): soprattutto si dovrebbe dare un'occhiata al metodo run() a cui fa riferimento il Thread del tuo orologio e all'implementazione del metodo "start()".

&Ciao.