繁体   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