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