ProgressMonitorDialog和用户交互

时间:2014-09-29 13:24:57

标签: java asynchronous swt progressmonitor

我使用ProgressMonitorDialogIRunnableWithProgress在后​​台阅读文件。

如果在此文件处理期间发生错误(数据不是我期待的),我想询问用户他/她是否想要继续下一行。

现在的问题是,为了询问用户是否要继续,我必须显示一个对话框。显示来自非UI线程的对话框涉及使用Display.asyncExec()Display.syncExec()。为了将结果(用户决定)返回给后台线程,我必须使用回调。

现在问题是,当我在后台线程的回调中得到结果时,如何继续读取文件?或者,换句话说,如何暂停执行后台线程,直到反馈返回然后继续它?

我愿意接受建议并愿意重组我的环境以适应这种行为。

1 个答案:

答案 0 :(得分:1)

Dislay.syncExec会阻止您调用它的线程,因此您可以执行以下操作:

final int[] result = new int[] {0};

display.syncExec(new Runnable() {
    public void run() {
        Shell shell = display.getActiveShell();

        MessageDialog dialog = .... your message dialog

        result[0] = dialog.open();
    }
});

... dialog return code in result[0]

(严重改编自org.eclipse.equinox.internal.p2.ui.ValidationDialogServiceUI中的代码)