簡體   English   中英

如何從Java中的另一個線程中的一個線程中獲取數據?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM