java - Swing - 多个 GUI

标签 java swing

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

我一直在研究 SwingUtilities.invokeLater 但我无法使用它来创建第一个 GUI,因为我正在向它传递对我不希望它传递的对象的引用按照编译器的要求是“最终的”。

第一个 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);
   }
}

你能帮帮我吗?

最佳答案

再次声明:除了 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
    }
}

关于java - Swing - 多个 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8889873/

相关文章:

Java MVC 项目——要么我不能更新绘图,要么我看不到它

java - Swing 中的真正透明

java - JSP和Servlet生命周期方法

java - (Java 7 NIO.2) 监视服务线程的自定义名称

java - 在 Android 中将文件写入外部存储失败

java - 动画 JDialog

java - 为什么 JPanel 上没有任何显示?

java - 隐藏服务实现的最佳实践

java - 如何在不使用常规客户端-服务器套接字编程的情况下在java中发送字节?

java - 如何将 JPanel 中的 TextFields 中输入的值添加到数组中?