我下面有一个代码......看一看。
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:”文本块,这是在延迟之前。为什么这种延迟会影响它之前的事情,我该如何解决这个问题?
答案 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编程的基础知识。