目标是一个GUI,在窗口中,按下播放按钮将释放GUI资源并开始运行我的游戏(游戏在Swing之外,在LWJGL中完成)。
这是我第一次看到自己这样做的方式。对我来说,更安全的选择如下:
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();
}
第二种做法似乎更为可取,因为它更简单,但我担心会出现一些问题。例如:
所以我问这个问题的原因是因为我正在寻找实现这个问题的最好方法,但我也很好奇如果我以第二种方式实施我的程序,那么是否以及为什么会发生任何奇怪的事情