我遇到长时间运行的问题。
显示对话框后,我想扫描一个ftp目录。此任务需要一些时间,因此我需要在UI线程中运行此任务。
我的想法是
@Override
protected void postDialogOpen() {
// if invoked via menu button
if (!scanFtp) {
final Display display = Display.getDefault();
new Thread(new Runnable() {
@Override
public void run() {
//initProgressWaitViewer();
scanFtpServer();
//closeProgressWaitViewer();
display.syncExec(new Runnable() {
@Override
public void run() {
updateTree();
}
});
}
}).run();
}
}
但是在执行scanFtpServer()期间,我的对话框不可移动,如果我点击它就变成了#34;不负责任的"。
我做错了吗?
答案 0 :(得分:4)
在类run()
中调用方法Thread
时,您正在调用者线程上执行该方法,就像调用任何其他方法一样。如果要在该线程中生成新线程并执行方法run()
,则需要调用方法start()
,这将完成设置线程并运行它的所有工作。
所以替换
}).run();
带
}).start();
答案 1 :(得分:3)
尝试.start()
代替.run()
。