Swing - 多个GUI

Dav*_*inn 2 java swing

我正在开发一个具有多个Swing GUI的应用程序.主GUI有一个按钮,一旦按下,就会调用另一个GUI.问题是,一旦按下该按钮并且出现新的GUI,两个窗口都会挂起.

我一直在研究SwingUtilities.invokeLater但是我不能用它来创建第一个GUI,因为我传递了一个对象的引用,我不希望它像编译器要求那样是"最终的".

创建第一个GUI:

MainUI gui = new MainUI(player);
gui.setVisible(true);
Run Code Online (Sandbox Code Playgroud)

第二个创建时间:

private void challengeBtnActionPerformed(java.awt.event.ActionEvent evt) { 
   if (board.isVisible()) {
      board.dispose();
      resetComponents();
   } else {
      MainUI gui = new MainUI(player);
      gui.setVisible(true);
   }
}
Run Code Online (Sandbox Code Playgroud)

你能帮我吗?

Moc*_*Tim 6

再一次:除了EDT之外,你不应该与任何线程中的Swing组件进行交互.

您应该通过MainUI以下方式调用您:

public class MainUI extends javax.swing.JFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MainUI().setVisible(true);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以重新设计您的应用程序,以便MainUI以这种方式调用您的应用程序.

更新:

以下代码应该有效.

public class MainUI extends javax.swing.JFrame {
    public static void main(String[] args) {
        final Player player = new Player();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new MainUI(player).setVisible(true);
            }
        });
        player.changeState(); // You can do this
        // player = new Player(); // You can't do that
    }
}
Run Code Online (Sandbox Code Playgroud)