[英]How can I get data from in one thread from another thread in Java?
我有一個簡單的客戶端-服務器程序。 在一個正在運行的線程GUI中,當我單擊GUI上的“連接”按鈕時,我以新線程連接到服務器,過一段時間后,我從服務器接收到一些數據並將其傳遞給GUI-我該怎么做?
將對您的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是專門為這種用例設計的。
通常-通過將回調對象傳遞給新線程,並在每次獲得結果時調用該回調,從而更新GUI。
“回調”可以是實現您的自定義接口的對象,該對象將結果作為參數。
BackgroundThread background = new BackgroundThread();
backgroundThread.setCallback(new Foo() {
public void updateGUI(Bar bar) {
//...
}
}
然后,當您在后台線程中獲得可用信息時,只需調用:
getCallback().updateGUI(bar);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.