2010-10-14 6 views
1

J'ai besoin d'écouter une entrée série en continu, mais NetBeans avertit "Invoquer Thread.sleep dans la boucle peut causer des problèmes de performances." Je comprends pourquoi cela cause des problèmes de performances, mais quelle est la meilleure alternative en Java?Java: alternative au sommeil en boucle?

public class SerialIO extends javax.swing.JFrame { 
    ... 
    class RcvTask extends Thread { 
     public void run() { 
      try { 
       SerInputStream sis = new SerInputStream(serialPort); 
       InputStreamReader isr = new InputStreamReader(sis); 
       BufferedReader reader = new BufferedReader(isr); 
       while (true) { 
        String line = reader.readLine(); 
        parse(line); 
        sleep(RX_SLEEP); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    ... 
+0

Est-ce que votre com série. bibliothèque ont des événements ou des fonctionnalités asynchrones? – Skurmedel

+3

La meilleure alternative est de supprimer le sleep(), vous ne devriez pas en avoir besoin. BTW: Si vous avez un JFrame, verrez-vous le printStackTrace() ou sera-t-il rejeté? –

Répondre

21

Pourquoi avez-vous besoin de sleep?

BufferedReader.readLine() est une opération de blocage.


Sur le même sujet:

+5

J'aimerais pouvoir doubler le vote pour celui-ci. –

+3

Apparemment, je n'ai pas assez dormi. – jacknad

+1

@Jack: Je pense que j'ai une solution (excuses si vous perdez de façon inattendue les 8 prochaines heures) 'JackN.getInstance(). Sleep (28800000);' –