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

函数执行中按钮资源未实时更新,玩家与电脑操作间暂停异常求助

问题分析与解决方案

你遇到的核心问题是在Swing的事件调度线程(EDT)中调用了Thread.sleep()——EDT负责处理所有UI渲染和用户事件,一旦被阻塞(比如sleep),所有UI更新操作(包括drawTheMove里的按钮文本/背景修改)都会被暂停,直到阻塞解除、整个game方法执行完毕后才会一次性生效。

解决方案:用Swing Timer替代Thread.sleep

Swing提供了javax.swing.Timer类,专门用于在UI线程中调度延迟任务,不会阻塞EDT,能让UI更新及时生效。我们可以重构case 1的逻辑,把需要延迟执行的操作放到Timer的回调中:

import javax.swing.Timer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// ... 你的其他代码 ...

public void game(Point p, Button btn) {
    switch (turn % numOfplayers) {
        case 0: {
            if (!checkIfGotWinner()) {
                if (isValid(p)) {
                    addChoice(p);
                    drawTheMove(btn);
                    turn++;
                    if(!isHuman2) {
                        getUserClicks = false;
                        comp.playYourGameBitch(this);
                    }
                }
            }
            break;
        }
        case 1: {
            if (!checkIfGotWinner() && isValid(p)) {
                // 创建一个仅执行一次的400ms延迟Timer
                Timer delayTimer = new Timer(400, new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        // 延迟后执行电脑操作与UI更新
                        addChoice(p);
                        drawTheMove(btn);
                        getUserClicks = true;
                        turn++;
                        checkIfGotWinner();
                    }
                });
                delayTimer.setRepeats(false);
                delayTimer.start();
            }
            break;
        }
    }
}

为什么这样有效?

  • Timer不会阻塞EDT:它会把延迟任务加入EDT的事件队列,当前game方法执行完毕后,EDT可以继续处理其他UI渲染任务,不会出现卡顿。
  • 延迟后的操作仍在EDT中执行:Timer的actionPerformed方法是在EDT中调用的,完全符合Swing的UI线程规则,确保drawTheMove的按钮修改能立即生效。

额外注意事项

确保所有直接修改UI的操作(比如drawTheMove里的btn.setText和setBackgroundResource)都在EDT中执行——这里Timer的回调已经满足这个要求,无需额外处理。

内容的提问来源于stack exchange,提问作者Nakash.i

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:14:40