如何从Java中的另一个线程获取一个线程中的数据?

时间:2012-01-10 22:22:07

标签: java multithreading

我有一个简单的客户端 - 服务器程序。在一个线程GUI中运行,当我点击GUI上的“连接”按钮时,我在新线程中连接到服务器,一段时间后我从服务器收到一些数据,我想将它传递给GUI - 我该怎么做? / p>

2 个答案:

答案 0 :(得分: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 :(得分:1)

通常 - 通过将回调对象传递给新线程,并且每当有结果时,都会调用该回调,从而更新GUI。

“回调”可以是实现你自定义界面的对象,它将结果作为参数。

BackgroundThread background = new BackgroundThread();
backgroundThread.setCallback(new Foo() {
   public void updateGUI(Bar bar) {
        //...
   }
}

然后,当您在后台线程中获得可用信息时,您只需致电:

getCallback().updateGUI(bar);