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