2014-03-24 25 views
1

我有一个来自tcp套接字的消息(线路),(来自CAN网关的消息)。在选定的消息上,在选择和解析之后,我想更新一个swing GUI表单(例如在Netbeans中生成)。我读了必须从事件处理程序驱动swing更新,并且有很多示例,但它们基于按钮按下,滑块更改等,而不是传入的套接字数据(或串行端口)。看起来,我需要对socket的'readline'进行处理来生成一个事件,但是我没有找到示例,并且认为它必须是一个常见问题,也许我在错误的轨道上,更简单的选择。Java:如何从套接字readline()生成一个事件?

回答

1

使用SwingUtilities.invokeLater()在swing事件线程上运行任意代码。例如:

String stuff = socket.readLine(); 
    if (myStuff(stuff)) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       // do any updates to swing ui here 
      } 
     }); 
    } 
+0

因此,据我所知,“//任何更新...”中的代码已排队在swing事件派发线程中运行。假设更新向某个图表发送一个值,但是在图表完成更新之前有一个新的套接字行和结果值。密切关注的“运行”是否在EDT队列中,并且更新将在第一个完成时立即开始? – user3304253

+0

@ user3304253:是的,所有事件都排队 –