延迟正在影响整个Block

时间:2012-06-02 00:15:56

标签: java delay

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

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)
    {
    }
}

问题是无论我在文本框中输入内容并点击输入,不仅需要一秒钟显示在文本区域中,还需要显示“You:”文本块,这是在延迟之前。为什么这种延迟会影响它之前的事情,我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

在动作侦听器完成之前,UI无法更新。如果你想在延迟之后改变一些东西,你应该在不同的线程上安排它,而不是在事件处理程序内等待:

addToChat("You: "+enter.getText());
enter.setText("");
new Thread(
    new Runnable() {
        public void run() {
            delay(1000);
            addToChat("oie");
        }
    }
).start();

答案 1 :(得分:1)

你在Event Dispatch Thread sleep(),这意味着你的用户界面已被冻结,无法重新绘制,或接受输入或任何内容。您应该只在EDT中执行非常快速的操作以避免这种影响。查看Graphical User Interfaces及以下教程,了解UI编程的基础知识。