2013-05-20 112 views
0

我需要做一个线程,开始在摆动按钮推动并等待来自rs232的输入,处理它并将String返回到我的变量。问题是如何做到这一点?线程输出监听器

它应该是这样的:

String myOutputString = waitForInputThread(); 

或者如果可能的摆动面板制造类似监听器做一些事情,如果这waitForInputThread发送中断(例如,如果GET RS232输入不更新列表物品JTable)。

你能给我一些线索,教程,例子等吗?

+3

http://docs.oracle.com/javase/tutorial/uiswing/concurrency/worker.html – assylias

+2

不要阻塞EDT(Event Dispatch Thread) - 当发生这种情况时GUI将“冻结”。而是为长时间运行的任务实施'SwingWorker'。有关更多详细信息,请参见[Swing中的并发](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –

+0

@Zoyd是不是更容易,而不是更容易重命名? – rene

回答

1

为避免阻塞事件调度线程(它是更新GUI的线程),请启动一个新线程与RS232进行交互。 SwingWorker类是一种选择,但您可以轻松使用普通线程。 阻止EDT会导致您的GUI冻结,所以它绝对不能用于冗长的任务。

一旦计算出结果,使用SwingUtilities.invokeLater()更新GUI。这可确保在EDT上发生GUI更改。

我倾向于认为通过ExecutorService执行正常线程的单元测试更好的(你可以写一个ExecutorService立即执行Runnable,避免使用JUnit任何讨厌的线程问题)。

+0

好吧,我有一个线程一直运行读取rs232,但如何编写一个监听器线程事件?我想要这样:线程一直工作,当他读取rs232时,他会像事件一样传递它。 gui中的听众读这个事件并做一些事情。 – Gravian