我正在从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循环中监听我的动作。
我是如何实现这一目标的?
答案 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线程。