如何从Eclipse命令调用的类的实例中设置SWT-Text元素的内容



我通过扩展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.asyncExecDisplay.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运行代码。

最新更新