我有这样的东西:
for(int i=0; i<5; i++){
mytextarea.setText("hello " + i);
try{
Thread.currentThread().sleep(1000); //to give time for users to read
} catch(Exception e){}
}
我期望它会在文本区域显示“hello 0”,等待1秒,然后显示“hello 1”,然后等待1秒,等等。
但是发生的情况不同,它等待 5 秒,然后显示“hello 4”。
有什么想法吗?
最佳答案
是的 - 你基本上阻塞了 UI 线程,所以它永远不会真正更新。
在 UI 线程中 hibernate 是一个非常糟糕的主意。
如果你想做这样的事情,你应该使用Timer
。 (我假设您正在使用 Swing。如果没有,请编辑您的问题以表明您正在使用哪个 UI 框架。)
您还应该注意,Thread.sleep
是一个静态方法。您使用它就像它是一个实例方法一样。诚然,您碰巧在当前线程“上”调用它,但您的用法表明您认为:
Thread t = new Thread(...);
t.start();
t.sleep(1000);
将使新线程 hibernate 。它不会 - 它会让当前线程 hibernate ,因为这就是 Thread.sleep 总是做的事情。在我看来,Java 允许您以这种方式调用静态方法是一个错误 - 如果您使用的是 Eclipse,则可以选择将其设置为警告或错误。
关于Java: mytextarea.setText ("hello") + Thread.sleep(1000) = 奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2034321/