Swing - 多个GUI

时间:2012-01-17 05:00:15

标签: java swing

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

我一直在调查SwingUtilities.invokeLater但是我不能用它来创建第一个GUI,因为我传递了一个对象的引用,我不希望它是'final'的编译器要求。

使用以下命令创建第一个GUI:

MainUI gui = new MainUI(player);
gui.setVisible(true);

第二个创建于:

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

请帮帮我吗?

1 个答案:

答案 0 :(得分: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);
            }
        });
    }
}

您可以重新设计自己的应用,以便以这种方式调用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
    }
}