java - 在 e4 RCP 应用程序中显示状态行并将其连接到 ProgressView/EclipseJob 进度
问题描述
我正在使用此处描述的进度视图:https ://wiki.eclipse.org/Eclipse4/ProgressView 。当我使用以下命令开始作业时,它会正确显示在 ProgressView 中。
final Job job = Job.create("TestJob", (ICoreRunnable) monitor -> {
monitor.beginTask("TestJob", 100);
// do job stuff
monitor.worked(50);
// do job stuff
monitor.worked(50);
monitor.done();
}
现在我还想在 Statusline 中反映当前的 Job 进度。
我的第一个问题是让状态行甚至在我的工作台中可见。从那里状态行将需要链接到最后的作业进度。
我尝试在主窗口底部使用修剪栏。在这个修剪栏上,我添加了一个 Toolcontrol,它引用了我自己的实现,该实现包含一个 StatusLineManager 实例。但我希望在获取 Statusline 时有一个更标准化的解决方案。
所以我看到 WorkbenchWindowAdvisor 可以被子类化。在这里,可以使 StatusLine 与 ProgressIndicator 一起可见。
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
super(configurer);
}
@Override
public void preWindowOpen() {
IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
configurer.setShowStatusLine(true);
configurer.setShowProgressIndicator(true);
configurer.setTitle("RCP Application");
}
}
但我不知道它在哪里被调用或我应该在哪里调用它。
我将不胜感激任何帮助或不同的解决方案!
编辑:
所以我又看了一下https://wiki.eclipse.org/Eclipse4/ProgressView,发现提到了一个 ProgressRegion 类。这正是我想要的,当我将这个类添加到我的 ToolControl 时,它与我开始的任何工作相关联。尽管如此,当 Workbench 首次启动时,我仍然会收到 NullPointerException。进度指示器旁边也没有显示文本。有什么想法吗?
!ENTRY org.eclipse.e4.ui.workbench 4 0 2018-06-15 11:10:53.085
!MESSAGE Unable to create class 'org.eclipse.e4.ui.progress.internal.ProgressRegion' from bundle '480'
!STACK 0
org.eclipse.e4.core.di.InjectionException: java.lang.NullPointerException
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:65)
at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990)
at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)
at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)
at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:332)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:186)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:108)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:51)
at org.eclipse.e4.ui.workbench.renderers.swt.ToolControlRenderer.createWidget(ToolControlRenderer.java:126)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:992)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:661)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:767)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:738)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:732)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:716)
at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:69)
at org.eclipse.e4.ui.workbench.renderers.swt.TrimBarRenderer.processContents(TrimBarRenderer.java:127)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:675)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:546)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:530)
at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:726)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:675)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:767)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:738)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:732)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:716)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1076)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:162)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
at org.eclipse.equinox.launcher.Main.main(Main.java:1472)
Caused by: java.lang.NullPointerException
at org.eclipse.e4.ui.progress.internal.ProgressContentProvider.<init>(ProgressContentProvider.java:40)
at org.eclipse.e4.ui.progress.internal.ProgressContentProvider.<init>(ProgressContentProvider.java:51)
at org.eclipse.e4.ui.progress.internal.ProgressViewerContentProvider.<init>(ProgressViewerContentProvider.java:51)
at org.eclipse.e4.ui.progress.internal.ContentProviderFactory.getProgressViewerContentProvider(ContentProviderFactory.java:37)
at org.eclipse.e4.ui.progress.internal.ProgressRegion.createContents(ProgressRegion.java:165)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:564)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
... 47 more
解决方案
推荐阅读
- .net - 多租户平台认证授权架构推荐
- javascript - 带按钮的 Toggle() 方法
- laravel - Laravel:具有 Servcie 容器的实例上的不同实现
- r - 在 R stringr 中第 n 次出现后匹配
- algorithm - 我们能解决这种 DP 中的 0-1 Multiple Knapsack 问题吗?
- angular - ngx-datatable 水平滚动在移动设备上不起作用
- java - 如何将 SpringBoot JMX bean 与 Jolokia 连接?
- ember.js - Ember 构建问题:“不能同时使用 decorators 和 decorators-legacy 插件”
- python - 我的类构造函数的“接口”应该是我的类的一部分吗?(如何?)
- c - 在 C 中,为什么有时我只需要 getchar() 来删除字符?