我正在开发一个具有多个 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/