java - 延迟无法正常工作,而是在长时间延迟后执行所有操作

标签 java multithreading user-interface delay

所以我正在做一个使用人工智能的井字游戏项目,我想做出一个选项,这样你就可以重玩游戏来看看上一轮发生了什么,我的意图是让重播与实际玩的一样现在,这意味着在显示每个 Action 之后都会有一个延迟,然后下一个 Action 就会发生。并且不是按预期工作,延迟只是一次全部进行,没有任何事情发生,直到突然整个游戏就显示出来了无论如何,被显示为游戏,但作为结束屏幕,这是代码:

replayMode=true;
    setStatus("Replay Playing...");
    ifButtonsEnabled(true);
    initBoard();
    int turn=0;
    Move current;
    for(int i=0;i<replayer.getSizeOfVect();i++)
    {
        current=replayer.getMoveAt(i);

        if(i%2==0)
        {
            buttons[current.getI()][current.getJ()].setText("X");
        }
        else
        {
            buttons[current.getI()][current.getJ()].setText("O");
        }
        try {
            Thread.sleep(650);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    setStatus("Replay ended.");
    replayMode=false;

最佳答案

通常,当您在 GUI 程序中看到这种效果时,这是因为您需要将控制权交还给 GUI 线程的事件循环才能发生任何绘图。我建议使用间隔为 650 毫秒的计时器,并在计时器的每次滴答时执行一个“步骤”动画,而不是 Thread.sleep

关于java - 延迟无法正常工作,而是在长时间延迟后执行所有操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23746424/

相关文章:

python - 我不能在python中启动两个并行线程吗,每个线程都有一个forerver循环

具有多行项目的 iOS 选择器控件

java - 打开启动 Swing 界面的首选方法是什么?有什么区别?

java - REST Java 类 java.util.LinkedList 的消息正文编写器

java - 如何遍历 TreeMap?

Java集合二分查找: The method binarySearch in the type Collections is not applicable for the arguments

java - 在 OS X 上的 Java swing 中设置默认应用程序图标图像

Json.NET 和 GC 等待的 C# 服务性能问题

java - 将项目插入队列后,BlockingDeque 不会解除阻塞

带有 JFrame 的 Java GUI