java - 线程输出监听器

标签 java multithreading swing event-dispatch-thread

我需要创建一个线程,该线程从按下 Swing 按钮开始并等待来自 rs232 的输入,处理它并返回 String到我的变量。问题是如何做到这一点?

应该是这样的:

  String myOutputString = waitForInputThread();

或者,如果可以在 Swing 面板中制作类似监听器的东西,如果此 waitForInputThread 执行某些操作发送中断(例如,如果获取 rs232 输入,则更新 JTable 中的项目列表)。

您能给我一些线索、教程、示例等吗?

最佳答案

为了避免阻塞事件调度线程(即更新 GUI 的线程),请启动一个新线程与 RS232 交互。 SwingWorker class 是一种选择,但您也可以轻松地使用普通线程。1阻止 EDT 会导致 GUI 卡住,因此绝不能将其用于冗长的任务。

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

1 我倾向于发现通过 ExecutorService 执行的正常线程更适合单元测试(因为您可以编写一个 ExecutorService 来立即执行 Runnable,避免 JUnit 出现任何令人讨厌的线程问题)。

关于java - 线程输出监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16648626/

相关文章:

c - 在pthread_cond_broadcast之后,哪个线程拥有关联的互斥锁?

java - 当我尝试从 JList 到另一个 JList 的 getSelectedValue() 时出现错误

java - 获取 `JCheckBox` 关联的 `id` on swing

java - ImageIcon 显示 URL 图像

java - 如何为 java HttpURLConnection 流量启用线路日志记录?

java - Hibernate:将属性字段设置为静态最终对象实例

c++ - "data ready"标志的同步机制?

java - 将 OpenGL 与 LWJGL 结合使用不会生成图片

java - 为什么数组赋值不兼容,尽管它们的数据类型是兼容的?

c++ - 来自 TBB 节点的异步输入/输出和非均匀输出