我对Java中的多线程感到困惑,我有一个GUI,我创建了一个线程,另一个项目充当服务器,用于接收来自其他数据源的数据,这些数据来自一个单独的线程。服务器的线程调用GUI线程中的一个视图中的方法并更新状态,但GUI不会更新。如何正确设置此体系结构。这就是我所拥有的:
public static void main(String[] args)
{
//Connections
Runnable r2 = new Runnable() {
@Override
public void run()
{
App.connectToServer();
}
};
//Launch main window
Runnable r1 = new Runnable() {
@Override
public void run()
{
//Installs theme
WebLookAndFeel.install();
//Launches main window
BootWindow myMainWindow = new BootWindow();
}
};
Thread thr1 = new Thread(r1);
Thread thr2 = new Thread(r2);
thr1.start();
thr2.start();
}
//Server connections
private static void connectToServer()
{
System.out.println("Connecting to the eTrade Manager Server..");
etmServer server = new etmServer();
server.connectEtmServer();
}
答案 0 :(得分:0)
如果您使用的是AWT / Swing,GUI将在一个名为Event Dispatch Thread(EDT)的特殊线程上运行,并且所有GUI更新都必须在该线程上运行。所以你需要这样做:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//code goes here
}
});
请记住,Swing是单线程的,并且不是线程安全的。