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,则可以选择将此方法设置为警告或错误.
归档时间: |
|
查看次数: |
4546 次 |
最近记录: |