1

我在下面有一个代码......看看。

enter.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            if (enter.getText().length()>0){

            addToChat("You: "+enter.getText());
                enter.setText("");
                delay(1000);
                addToChat("oie");
            }

        }
    });

这是延迟无效。

  public static void delay(int delayTime){
    try
    {
        Thread.sleep(delayTime);
    } catch (InterruptedException ie)
    {
    }
}

问题是,无论我在文本框中输入什么内容并按回车键,都需要一秒钟时间才能显示在文本区域中,而且“你:”文本块也需要一秒钟才能显示出来,这是在延迟之前. 为什么这种延迟会影响之前的事情,我该如何解决?

4

2 回答 2

2

在您的动作侦听器完成之前,UI 没有机会更新。如果您想在延迟后更改某些内容,则应将其安排在不同的线程上,而不是在事件处理程序中等待:

addToChat("You: "+enter.getText());
enter.setText("");
new Thread(
    new Runnable() {
        public void run() {
            delay(1000);
            addToChat("oie");
        }
    }
).start();
于 2012-06-02T00:19:22.430 回答
1

sleep()Event Dispatch Thread中,这意味着您的 UI 被冻结并且无法重新绘制自身,或接受输入,或任何东西。您应该只在 EDT 中执行非常快速的操作以避免这种影响。查看图形用户界面和以下教程,了解 UI 编程的基础知识。

于 2012-06-02T00:21:22.767 回答