Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    29

    AScoltatore keyevent in java

    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

  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    codice:
      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

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    29
    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

  4. #4
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    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

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    29
    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

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    29
    Ok ho risolto
    Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.