在Swing中实现GUI的方法,多线程是一个值得关注的问题

时间:2013-12-11 19:16:14

标签: java multithreading swing

目标是一个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();
}

第二种做法似乎更为可取,因为它更简单,但我担心会出现一些问题。例如:

  • 在Event Dispatch Thread中处理框架会搞砸什么?
  • 主线程已经终止时为游戏开始一个新线程?

所以我问这个问题的原因是因为我正在寻找实现这个问题的最好方法,但我也很好奇如果我以第二种方式实施我的程序,那么是否以及为什么会发生任何奇怪的事情

0 个答案:

没有答案