You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:54:46