Java SWT UI 线程冻结,即使 运行 在新线程中
Java SWT UI Thread freeze even if run in new Thread
我有一个长 运行ning 任务的问题。
显示对话框后,我想扫描 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() 期间,我的对话框是不可移动的,如果我点击它,它会变成 "unresponsible"。
我做错了什么吗?
尝试做 .start()
而不是 .run()
.
在classThread
中调用方法run()
时,您是在调用者线程上执行该方法,就像调用任何其他方法一样。如果您想生成一个新线程并在该线程中执行方法 run()
,则需要调用方法 start()
,这将完成设置线程和 运行 的所有工作.
所以替换
}).run();
和
}).start();
我有一个长 运行ning 任务的问题。
显示对话框后,我想扫描 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() 期间,我的对话框是不可移动的,如果我点击它,它会变成 "unresponsible"。
我做错了什么吗?
尝试做 .start()
而不是 .run()
.
在classThread
中调用方法run()
时,您是在调用者线程上执行该方法,就像调用任何其他方法一样。如果您想生成一个新线程并在该线程中执行方法 run()
,则需要调用方法 start()
,这将完成设置线程和 运行 的所有工作.
所以替换
}).run();
和
}).start();