Eclipse插件开发,长期运行任务

时间:2014-04-10 10:36:57

标签: eclipse plugins asynchronous code-injection

我有几个拥有监听器的UI组件。所有这些侦听器都调用方法dialogChanged()。我的目标是在这种方法中进行一些长时间的处理,并且不要让UI冻结。根据{{​​3}},可以在运行时注入UISynchronize的帮助下完成此操作。但它失败了,这种类型的领域没有注入,我得到NullPointerException。这是我的代码的相关部分:

@Inject UISynchronize sync;
Job job = new Job("My Job") {

    @Override
    protected IStatus run(IProgressMonitor arg0)
    {
        sync.asyncExec(new Runnable()
        {
            @Override
            public void run()
            {
                updateStatus("Checking connection...");
                if (bisInstallDirSelected)
                    bisSettingsChanged();
                else
                    jarSettingsChanged();
            }
        });
        return Status.OK_STATUS;
    }

};
protected void dialogChanged()
{
    job.schedule();
}

方法updateStatus(String s)bisSettingsChanged()jarSettingsChanged()与用户界面进行交互,他们使用超类setErrorMessage(String newMessage)的方法org.eclipse.jface.wizard.WizardPage 如果有人可以告诉我我做错了什么或建议更好的方法来处理这个问题,我会感激。

1 个答案:

答案 0 :(得分:1)

您只能在e4应用程序模型创建的类中使用@Inject(例如,部件或命令处理程序的类)。

您也可以使用ContextInjectionFactory对自己的课程进行注射。

对于尚未注射的课程,您可以使用传统的'在UI线程中运行代码的方式:

Display.getDefault().asyncExec(runnable);