我有一個簡單的客戶端服務器程序。在一個線程中GUI正在運行,當我點擊GUI上的「連接」按鈕時,我在新線程中連接到服務器,一段時間後,我從服務器收到一些數據,並且想將它傳遞給GUI - 我該怎麼做?如何從Java中的另一個線程的一個線程中獲取數據?
0
A
回答
3
傳遞一個參考到GUI對象讀線程,並且有讀線程調用一種GUI實例在他接收到數據時的方法。
如果GUI是一個Swing GUI,你需要調用包裝成SwingUtilities.invokeLater()
:
Thread readingThread = new MyReadingThread(gui);
readingThread.start();
,並在讀線程:
String data = readData();
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui.dataHasBeenReceived(data);
}
});
注意SwingWorker爲專這種用例。
1
通常 - 通過將回調對象傳遞給新線程,並且每當有結果時,調用該回調,然後更新GUI。
「回調」可以是實現您的自定義接口的對象,它將結果作爲參數。
BackgroundThread background = new BackgroundThread();
backgroundThread.setCallback(new Foo() {
public void updateGUI(Bar bar) {
//...
}
}
比,當你有在後臺線程可用的信息,你可以致電:
getCallback().updateGUI(bar);
相關問題
- 1. 如何從Java中的另一個線程中殺死一個線程?
- 2. 我如何從另一個線程或進程中獲取數據(Android/Java)
- 3. 線程交互(從一個線程到另一個線程的數據)c#
- 4. 從另一個線程寫入陣列中獲取數據
- 5. 一個線程如何在另一個線程中被殺死
- 6. UI線程如何知道另一個線程上的數據?
- 7. Java:如何捕獲線程上的InterruptedException,當被另一個線程中斷?
- 8. 中斷內的另一個線程的run方法,一個線程在Java中
- 9. Java Swing應用程序:如何從GUI線程獲取數據到另一個線程?
- 10. 如何將對象從主線程傳遞到java中的另一個線程
- 11. 如何捕獲Java中另一個線程拋出的異常?
- 12. 如何從監視器中斷另一個線程線程
- 13. shared_from_this()從另一個線程(一個成員線程函數)
- 14. 從另一個線程操作線程
- 15. 從另一個線程運行線程
- 16. C#.NET中的線程和交叉線程,如何從另一個線程中更改ComboBox數據?
- 17. 從工作者線程獲取數據到另一個
- 18. 如何將數據從一個線程傳遞到另外三個線程?
- 19. 如何讓一個java線程等待另一個線程的結果?
- 20. 如何確定從另一個線程創建哪個線程?
- 21. 如何將一個int值從一個線程發送到另一個線程?
- 22. 如何從另一個線程使用線程的方法?
- 23. 從另一個線程加載數據,線程安全嗎?
- 24. 從C++中的另一個進程解鎖一個線程
- 25. Python:在一個線程中停止另一個線程從另一個線程結束
- 26. 在另一個進程中獲取線程的EBP
- 27. 從另一個線程DoDragDrop()
- 28. HttpWebRequests從另一個線程
- 29. 從另一個線程
- 30. 從另一個線程
感謝您的解釋和示例代碼,它完美地在我的簡單程序中工作。我聽說過SwingWorker,但我不想閱讀和學習整個類,只是從一個線程發送一個短字符串到另一個線程。 – koleS 2012-01-11 00:24:43