2014-03-24 26 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:是的,所有事件都排隊 –