Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    14

    lettura da tastiera non bloccante

    Ho questo thread:

    codice:
    public void run(){
            while(this.gd.prenotazione == false);
            try{
            if (this.gd.t.readLine().equals("")){
                thid.gd.prenotazione = true;
                this.gd.prenotato = "c0";
                this.gd.semaforoConduttore.release();
            }
         }catch(Exception e){System.out.println(e);}
     }
    il thread fintanto che non ha ricevuto un'input da tastiera non termina, invece io ho bisogno che eventi esterni possano farlo terminare, semplicemente modificando la variabile condivisa "prenotazione". C'è un modo per rendere la lettura da tastiera non bloccante o comunque di far terminare questo thread?

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Il modo migliore è una variabile booleana nel while. Non so che sia l'oggetto gd... Comunque la variabile generalmente è nella classe ove si trova il run() non in un altra classe.
    codice:
    public void run() {
      while(flag) {
        // Codice del thread
      }
    }
    Ad esempio, se viene premuto un bottone che faccia fermare una data operazione, come un download ad esempio, tu chiamerai un metodo di questa classe, ad esempio chiamato stopThread() e setti quella variabile a false.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    14
    niente da fare... non termina

  4. #4
    Originariamente inviato da vent1
    niente da fare... non termina
    Evidentemente l'hai scritto male perchè è una cosa che si può fare tranquillamente. Ho buttato giu' questo, adattalo al tuo codice:
    codice:
        public static void main(String[] args) throws Exception {
            class MyThread extends Thread {
    
                Boolean uscita = false;
    
                public void setUscita(Boolean uscita) {
                    this.uscita = uscita;
                }
    
                @Override
                public void run() {
                    System.out.println("Thread partito");
                    while (uscita == false);
                    System.out.println("Thread terminato");
                }
            };
    
            MyThread t = new MyThread();
            t.start();
            for (int i = 5;i < 16;i = i + 5) {
                System.out.println(i + " secondi.");
                System.out.flush();
                Thread.sleep(5000);
            }
            t.setUscita(Boolean.TRUE);
        }
    lolide
    Java Programmer

    Informati

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2011
    Messaggi
    14
    ho adattato il tuo codice inserendo il metodo per leggere da tastiera all'interno del ciclo while della run, ma niente il thread non vuole terminare

  6. #6
    Allora il Thread si blocca per altri motivi.
    Posta il codice che hai usato (quello con il codice adattato)
    lolide
    Java Programmer

    Informati

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.