wait()和sleep()的问题?

时间:2012-12-15 21:34:42

标签: java multithreading swing event-dispatch-thread

  

可能重复:
  GUI threading in java

我一直在尝试制作一个基于文本的游戏,它到目前为止,除了使用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();
        }
    }
} 

这是带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!救命啊!

1 个答案:

答案 0 :(得分:6)

这是通常的问题:你不应该阻止&#34;事件调度线程&#34; (EDT)。

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

你必须做你的动画&#34;在美国东部时间之外。

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