2014-02-28 194 views
0

我正在開發一個程序,它是一個綁定到GUI管理界面的UDP服務器。 UDP服務器作爲自己的類運行並實現Runnable接口。在Java線程之間共享數據

我決定設計程序的最佳方式是讓UDP服務器作爲後臺線程運行,並在事件發生時更新GUI(例如用戶成功驗證服務)。

我不太清楚用什麼數據結構來傳遞線程之間的信息,當GUI線程沒有等待(本身)這個信息時,它也在執行其他任務。我看到一些類似Futures,但這些只告訴你什麼時候完成任務(這裏不是優先事項)和BlockingQueue接口,但使用Queue解決方案好像我必須反覆輪詢隊列,直到信息是推送到它上面,然後根據什麼信息被推入到隊列中來做出反應。

是否有一個數據結構,我可以用它將數據從服務器「發送」到GUI,以便它可以相應更新?

+2

它有助於提及你正在使用的GUI框架(例如Swing,SWT等),但大多數GUI框架提供一種從其UI處理程序應該在UI線程上運行的非UI線程觸發自定義事件的方法。 – Wyzard

+0

我正在使用Swing,如果可用,這聽起來像是一個很好的解決方案。 – ahjohnston25

回答

1

也許,如果我很好理解,可以使用Observer pattern。請檢查Observable類或模型視圖範例的其他變體。

+0

另請參閱本教程,瞭解如何根據「模型」更改更新JTables:http://docs.oracle.com/javase/tutorial/uiswing/components/table.html#modelchange – robermann

+0

謝謝!這種模式非常完美,實施起來並不是太多工作。 – ahjohnston25

0

「的BlockingQueue接口,但使用隊列的解決方案似乎是我不得不反覆查詢隊列中,直到信息被推到它,然後再與基於被推到隊列中什麼樣的信息」

希望你知道使用BlockingQueue你沒有在你的代碼中進行輪詢,它在內部完成JAVA Api