从另一个线程更新GUI线程

时间:2014-10-08 15:04:06

标签: java multithreading swing

我对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();

}

1 个答案:

答案 0 :(得分:0)

如果您使用的是AWT / Swing,GUI将在一个名为Event Dispatch Thread(EDT)的特殊线程上运行,并且所有GUI更新都必须在该线程上运行。所以你需要这样做:

 SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        //code goes here
    }
  });

请记住,Swing是单线程的,并且不是线程安全的。