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

Java Swing Yahtzee程序:GUI更新间添加暂停以展示CPU掷骰过程

解决Swing中CPU三次掷骰子的分步显示问题

核心思路

使用重复的Swing Timer,配合计数器记录掷骰次数,每次触发时更新骰子状态并刷新GUI,完成三次后停止Timer。这样既不会阻塞EDT(事件调度线程),又能按顺序显示每次掷骰的结果。

实现代码

// 定义计数器,记录已完成的掷骰次数
private int cpuRollCount = 0;
private Timer cpuTurnTimer;

// 启动CPU回合的方法
private void startCPUTurn() {
    cpuRollCount = 0; // 重置计数器
    
    // 创建重复的Timer,间隔3秒
    cpuTurnTimer = new Timer(3000, new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            cpuRollCount++;
            
            // 执行掷骰逻辑(替换为你的实际代码)
            rollCPUDice();
            
            // 更新GUI
            contentPane.validate();
            contentPane.repaint();
            
            // 检查是否完成三次掷骰
            if (cpuRollCount >= 3) {
                cpuTurnTimer.stop(); // 停止Timer
                // 可在此处理CPU回合结束后的逻辑,比如计算得分
            }
        }
    });
    
    // 立即执行第一次掷骰(若需第一次也等待3秒,可将初始延迟设为3000)
    cpuTurnTimer.setInitialDelay(0);
    cpuTurnTimer.start();
}

// 示例掷骰方法
private void rollCPUDice() {
    // 写入你的骰子随机生成逻辑
    System.out.println("CPU第" + cpuRollCount + "次掷骰");
}

关键细节

  • 计数器控制:通过cpuRollCount变量跟踪已完成的掷骰次数,达到3次时停止Timer
  • EDT安全:Swing Timer的actionPerformed方法在EDT中执行,所有GUI更新操作均安全,不会导致界面冻结或跳过更新
  • 状态重置:每次启动CPU回合前重置计数器,避免多次触发导致计数混乱

注意事项

  • 启动新的CPU回合前,需停止之前可能仍在运行的Timer,避免逻辑冲突
  • 若需遵循Yahtzee规则保留部分骰子,可在每次掷骰前标记需重掷的骰子,仅更新对应骰子的状态

内容的提问来源于stack exchange,提问作者JavaNewb31

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:08:15