JOptionPane.showMessageDialog需点击两次确定才关闭的问题求助
问题排查与解决方案
Hey,这个问题其实很容易发现——你在actionPerformed方法里不小心调用了两次checkBet(),这就是对话框弹两次的元凶!
问题根源
看你的代码片段:
@Override public void actionPerformed(ActionEvent e) { checkBet(); // 第一次调用:条件不满足时弹出第一个对话框 if(checkBet()) { // 第二次调用:条件仍不满足,弹出第二个对话框 // ... 后续骰子滚动逻辑 } }
当玩家下注金额≤0时,第一次调用checkBet()会触发弹窗;紧接着第二次调用checkBet(),此时条件依然不满足,所以会再次弹出对话框。这就是为什么你需要点击两次“确定”才能让对话框消失的原因。
修复方案
只需要调用一次checkBet(),把返回结果存储到一个变量中,再用这个变量来判断是否执行后续逻辑:
@Override public void actionPerformed(ActionEvent e) { // 仅调用一次合法性检查,将结果存入变量 boolean isBetValid = checkBet(); if(isBetValid) { setRollingPlayer(currentPlayer); new Thread() { @Override public void run() { gameEngine.rollPlayer(rollingPlayer, 500, 2000, 500); } }.start(); } }
这样修改后,checkBet()只会被执行一次,对话框也只会弹出一次,点击一次“确定”就能关闭。
额外小建议
这种重复调用方法的问题很容易在编写代码时忽略,以后遇到类似的弹窗重复出现、逻辑重复执行的情况,可以优先检查是否存在多次调用同一个触发方法的情况,能快速定位问题~
内容的提问来源于stack exchange,提问作者user8420047
相关产品推荐
相关产品推荐

