循环问题

时间:2009-05-26 06:15:12

标签: java core

我正在从while循环内的串口读取数据,如下所示:

while((len = this.getIn().read(buffer)) > 0) {
    data = new String(buffer, 0, len);
    System.out.println("data len " + len);
    handleModemresponse(data);
}

但是,当从流开始读取数据时,具有断开连接按钮的主AWT窗口没有获得任何监听器(整个窗口没有获得监听器)。它只在传输完成时监听,即在while循环之外。

我希望我的AWT窗口能够在while循环中监听我的动作。

我是如何实现这一目标的?

4 个答案:

答案 0 :(得分:5)

为读取操作创建新线程。

public class LongProcess implements Runnable {
  public void startProcess() {
    Thread t = new Thread(this);
    t.start();
  }

      public void run() {
// Define inputstream here
        while((len = inputStream.read(buffer)) > 0) {
         data = new String(buffer, 0, len);
         System.out.println("data len " + len);
         handleModemresponse(data);
        }
      }
    }

编辑(评论Tom Hawtin - 评论后):

SwingUtilities.invokeLater(new LongProcess ());

答案 1 :(得分:4)

看起来你在一个线程中拥有所有东西 - 因此当你的工作方法正在进行时,你的GUI似乎被阻止,并且在循环结束之前不响应任何动作。

您必须在一个线程中将GUI出勤率与另一个线程中的工作方法分开。

答案 2 :(得分:2)

您正在调用的读取方法是阻止。您需要在不同的线程中移动它,以便让听众继续工作。

答案 3 :(得分:1)

我怀疑你应该将这个循环推送到一个单独的线程中,以便在传输过程中不会占用你的AWT线程。