我正在制作游戏,我需要关闭我的JOptionPane

时间:2014-02-05 22:03:29

标签: java swing user-interface joptionpane

int confirmDialog = JOptionPane.showConfirmDialog(null, "You selected quit! \nAre you sure you want to quit?", "Selected Quit", JOptionPane.YES_NO_OPTION);


if(confirmDialog == 0)                  
  System.exit(0);           
//focus under this comment here                     
if(confirmDialog == 1) {                    
  game.reset();                 
  displayBoard();                       
}

我用棋盘做了一场比赛。我有一个退出按钮退出游戏。当用户单击该按钮时,将使用上面的JOptionPane提示他们。它问他们是否确定要退出。我可以关闭游戏,但问题是当用户选择“否”时。 我希望用户能够点击“否”并拥有它以便游戏重置它所做的,我可以看到电路板重置。但是optionPane并没有消失,我希望OptionPane能够消失,以便他们可以玩。

1 个答案:

答案 0 :(得分:4)

由于您的确认对话框有两种可能的结果,您可以编写一个简单的if-else块,如下所示:

int confirmDialog = JOptionPane.showConfirmDialog(null, "You selected quit! \nAre you sure you want to quit?", "Selected Quit", JOptionPane.YES_NO_OPTION);

if(confirmDialog == JOptionPane.YES_OPTION) {               
    System.exit(0);           
    //focus under this comment here                     
} else {                    
    game.reset();                 
    displayBoard();                       
}

请注意,使用静态字段JOptionPane.YES_OPTION可以使代码更加健壮。

  

我可以看到电路板重置。但是optionPane并没有消失   我希望OptionPane能够消失,以便他们可以玩。

检查game.reset()中的某些内容是否阻止Event Dispatch Thread(a.k.a. EDT)。 EDT是一个单独的特殊线程,可以在其中创建和更新Swing组件。如果有一些耗时的任务阻止EDT,您的GUI可能会无响应。在Concurrency in Swing trail中查看更多内容。


题外话

关于这一行:

System.exit(0);

此方法终止当前运行的JVM,如System.exit(int status) javadoc中所述。这实际上是一种不好的做法。在使用Swing时,您应该在JFrame上调用dispose(),如果没有待处理的线程工作,则应该终止JVM。