使用java swing worker获取不同类的GUI以持续更新

使用java swing worker获取不同类的GUI以持续更新,java,user-interface,swingworker,Java,User Interface,Swingworker,我正在从另一个类中创建MainWindow类的新窗口。 MainWindow类的JFrame将打开,我可以单击我的按钮,但是在单击按钮后GUI不会像应该的那样更新。我在这个类中使用SwingWorkers,如果我自己运行它,GUI会不断更新。 但是,从另一个类创建它时,它没有正确更新,即使在我使用SwingWorker调用creating之后也是如此 private void StartButtonActionPerformed(java.awt.event.ActionEvent ev

我正在从另一个类中创建MainWindow类的新窗口。 MainWindow类的JFrame将打开,我可以单击我的按钮,但是在单击按钮后GUI不会像应该的那样更新。我在这个类中使用SwingWorkers,如果我自己运行它,GUI会不断更新。 但是,从另一个类创建它时,它没有正确更新,即使在我使用SwingWorker调用creating之后也是如此

    private void StartButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            
    // TODO add your handling code here:

        WindowEvent winClose = new WindowEvent(this,WindowEvent.WINDOW_CLOSING);
        Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(winClose);
        StartGame doGame = new StartGame();
        doGame.execute();

}                                           

class StartGame extends SwingWorker<Void, Void>
{
   @Override
   public Void doInBackground()
   {

    try {
        MainWindow game = new MainWindow(num_respawns, hits, regen_secs, time, map);
        game.setVisible(true);
    } catch (IOException ex) {
        Logger.getLogger(GameSetup.class.getName()).log(Level.SEVERE, null, ex);
    }

       return null;
   }
   @Override
   public void done()
   {
       System.out.println("opening done");
   }

}
private void startButtoActionPerformed(java.awt.event.ActionEvent evt){
//TODO在此处添加您的处理代码:
WindowEvent winClose=新的WindowEvent(这是WindowEvent.WINDOW\u关闭);
Toolkit.getDefaultToolkit().getSystemEventQueue().postEvent(winClose);
StartGame doGame=新的StartGame();
doGame.execute();
}                                           
类startName扩展SwingWorker
{
@凌驾
公共无效doInBackground()
{
试一试{
主窗口游戏=新主窗口(重生次数、命中次数、回复秒数、时间、地图);
game.setVisible(true);
}捕获(IOEX异常){
Logger.getLogger(GameSetup.class.getName()).log(Level.SEVERE,null,ex);
}
返回null;
}
@凌驾
公众假期结束()
{
系统输出打印项次(“打开完成”);
}
}

您的代码可能应该在EDT上运行。尝试
SwingUtilities.invokeLater()
此外,还要仔细阅读
SwingWorker
的文档。任何GUI更新都应在EDT上完成。方法
publish
done
在EDT上运行
doInBackground
位于后台非deamon线程中。@Antoniossss您的意思是创建一个新的invokeLater方法,从中打开主窗口,还是将此代码合并到编写此代码的类的先前存在的invokeLater方法中?