Java:mytextarea.setText("hello")+ Thread.sleep(1000)=奇怪的结果

evi*_*iko 2 java user-interface multithreading

我有这样的事情:

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){}
}
Run Code Online (Sandbox Code Playgroud)

我希望它会在文本区显示"hello 0",等待1秒,然后显示"hello 1",然后等待1秒等.

但是发生的事情是不同的,等待5秒,然后显示"你好4".

任何的想法?

Jon*_*eet 12

是的 - 你基本上阻止了UI线程,所以它永远不会实际更新.

睡在UI线程中是一个非常糟糕的主意.

如果你想做这样的事情,你应该使用Timer.(我假设您正在使用Swing.如果没有,请编辑您的问题以指明您正在使用的UI框架.)

您还应该注意这Thread.sleep是一种静态方法.您正在使用它,就好像它是一个实例方法.不可否认,你碰巧在当前线程上"打电话",但你的用法表明你认为:

Thread t = new Thread(...);
t.start();
t.sleep(1000);
Run Code Online (Sandbox Code Playgroud)

会使线程睡眠.它不会 - 它将使当前线程睡眠,因为这是Thread.sleep 总是这样做.IMO,Java允许您以这种方式调用静态方法是错误的 - 如果您使用的是Eclipse,则可以选择将此方法设置为警告或错误.