wait()和sleep()的问题?

1 java swing multithreading event-dispatch-thread

可能重复:
java中的GUI线程

我一直在尝试创建一个基于文本的游戏,它到目前为止,除了使用Thread.sleep()和wait()时这个奇怪的错误这个代码应该通过char打印消息char到一个名为console的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();
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

这是带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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

A.H*_*.H. 6

这是通常的问题:你不应该阻止"事件调度线"(EDT).

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

你必须在EDT之外做你的"动画".

查看此网站,Google或任何使用这些关键字的Swing教程,您将获得大量信息.