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();