【问题标题】:ProgressMonitorDialog and user interactionProgressMonitorDialog 和用户交互
【发布时间】:2014-09-29 13:24:56
【问题描述】:

我正在使用ProgressMonitorDialogIRunnableWithProgress 在后台读取文件。

如果在此文件处理过程中发生错误(数据不是我所期望的),我想询问用户是否要继续下一行。

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

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

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

【问题讨论】:

    标签: java asynchronous swt progressmonitor


    【解决方案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中的代码)

    【讨论】:

    • 让我试一试,然后回复你。
    • 是的,效果很好。谢谢格雷。盯着它看太久了。
    猜你喜欢
    • 2014-04-02
    • 2017-03-23
    • 2013-01-05
    • 2015-04-03
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多