java - wait() 和 sleep() 有问题吗?

标签 java multithreading swing event-dispatch-thread

<分区>

Possible Duplicate:
GUI threading in java

我一直在尝试制作一个基于文本的游戏,并且到目前为止,除了使用 Thread.sleep() 和 wait() 时出现的这个奇怪错误外 此代码应逐个字符地将一条消息打印到名为控制台的 JTextArea,每条消息之间都有延迟。

这里是wait()的代码

int i=0;
synchronized(mon) {
    while(i<msg.length())
    {
        console.setText(console.getText()+ msg.charAt(i));
        i++;
        try {
            mon.wait(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
} 

这是带有 sleep() 的代码:

int i=0;
    while(i<msg.length())
    {
        console.setText(console.getText()+ msg.charAt(i));
        i++;
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

但是,当它到达此代码时,程序会等待 msg.length*500ms,然后立即打印整个 msg!帮助!

最佳答案

这是常见的问题:您不得阻止“事件发送线程”(EDT)。

EDT 负责绘制组件和调度事件。因此,当您阻止此线程时,下一次重绘将在您离开方法并将控制权交还给 EDT 后发生。

你必须在 EDT 之外做你的“动画”。

使用这些关键字查找此站点、Google 或任何 Swing 教程,您将获得大量信息。

关于java - wait() 和 sleep() 有问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13896421/

相关文章:

java - Groovy 元类与 Java 8 的互操作性

java - setCellType(HSSFCELL.CELL_TYPE_NUMERIC) 在 apache poi 中不起作用

java - JPackage 仅返回 Java 14 上的 SDK 版本号

java - 如何在Java中捕获同时执行多个查询的响应时间?

java - 不同类(class)的 JPanel,是我做的不好吗?为什么?

java - 如何设置框架的矩形边界?

java - Pircbotx channel setMode() 在 main() 方法中不起作用

java - Spring Batch 分区 + 线程

multithreading - 什么是 "dreadlock"? (注意 "R")

java - 如何在随机位置生成 JFrame?