我通过扩展ViewPart
实现了一个Eclipse视图。在这个特定的视图中,我还实现了一个文本输入字段Text
和一些执行特定Eclipse命令的按钮。
例如:
IHandlerService handlerService = (IHandlerService) PlatformUI
.getWorkbench().getService(
IHandlerService.class);
handlerService.executeCommand("com.company.commandxyz", null);
该命令调用一个处理程序,然后该处理程序调用一个服务来挂接DSF扩展。具体来说,我通过扩展CommandFactory_6_8
实现了一个自定义的CommandFactory
。这允许我将命令排队到GDB,然后返回结果。但是,我想在Text字段中设置响应,该字段位于调用com.example.commandxyz
的View中。
不幸的是,我无法传递任何关于DSF扩展的实现的引用。我尝试了以下代码来获取Eclipse视图,以便随后设置文本(这是该视图的一个属性):
IViewPart vp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("com.example.myview");
然而,我在打电话时收到以下异常:
Exception in thread "MI RX Thread" java.lang.NullPointerException
知道我如何访问UI线程来检索视图的属性以便进行设置吗?
您提到的PlatformUI
代码必须在UI线程中运行。
使用Display.asyncExec
或Display.syncExec
从其他线程在UI线程中执行代码。
使用Java 8:
Display.getDefault().asyncExec(() -> { ... code to run in UI thread });
使用早期版本的Java:
Display.getDefault().asyncExec(new Runnable() {
public void run() {
... code to run in UI thread
}
});
asyncExec
在UI下一次准备运行代码时异步运行UI代码。syncExec
同步运行,阻塞当前线程,直到UI运行代码。