Java 如何在Swing中实现GUI,多线程是一个值得关注的问题
目标是一个GUI,在窗口中,按下play按钮将释放GUI资源并开始运行我的游戏(游戏在Swing之外完成,使用LWJGL) 这是我第一次看到自己这样做。在我看来,更安全的选择如下所示:Java 如何在Swing中实现GUI,多线程是一个值得关注的问题,java,multithreading,swing,Java,Multithreading,Swing,目标是一个GUI,在窗口中,按下play按钮将释放GUI资源并开始运行我的游戏(游戏在Swing之外完成,使用LWJGL) 这是我第一次看到自己这样做。在我看来,更安全的选择如下所示: public static void main(String[] args) { // setup gui objects JFrame frame = ...; frame.setVisible(true); // wait for the play button to
public static void main(String[] args) {
// setup gui objects
JFrame frame = ...;
frame.setVisible(true);
// wait for the play button to be pressed
synchronized(frame) {
frame.wait();
}
// free the gui objects, start the game
frame.dispose();
startGame();
}
// by the way, this method is called from the button's action listener
public void onPlayButtonPress(JFrame parent) {
// end the UI
synchronized(parent) {
parent.notify();
}
}
对我来说,这看起来“安全”的原因是GUI和游戏执行的清理是在主线程内完成的。这是我看到自己这样做的第二种方式,但我不确定自己对此有何感受:
public static void main(String[] args) {
// setup gui objects
JFrame frame = ...;
frame.setVisible(true);
}
public void onPlayButtonPress(JFrame parent) {
// free the gui objects
parent.dispose();
startGameInNewThread();
}
第二种方法似乎更可取,因为它更简单,但我担心会出现一些问题。例如:
- 在事件分派线程中处理帧会把事情搞砸吗
- 在主线程已终止时启动游戏的新线程
所以我问这个问题的原因是因为我在寻找最好的方法来实现它,但我也有点好奇,如果我用第二种方法实现我的程序,是否会发生一些奇怪的事情,为什么会发生这些事情。你可以简单地隐藏它,而不是处理框架。如果这不是一个选项,您可以先启动游戏线程(这样就有一个非守护进程线程在运行),然后处理框架。我个人更喜欢第二种选择