如何从 Eclipse 命令调用的 class 实例设置 SWT 文本元素的内容?

How to set content of SWT Text element from an instance of a class that is called by an Eclipse command?

我通过扩展 ViewPart 实现了一个 Eclipse 视图。在这个特定的视图中,我还实现了一个文本输入字段 Text 和一些执行特定 Eclipse 命令的按钮。

例如:

IHandlerService handlerService = (IHandlerService) PlatformUI
                                .getWorkbench().getService(
                                        IHandlerService.class);
handlerService.executeCommand("com.company.commandxyz", null);

此命令调用一个处理程序,然后该处理程序调用一个服务来连接到 DSF 扩展。具体来说,我通过扩展 CommandFactory_6_8 实现了自定义 CommandFactory。这允许我将命令排队到 GDB,然后取回结果。但是,我想在位于调用 com.example.commandxyz 的视图中的文本字段中设置响应。

遗憾的是,我无法传递任何对此 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 运行s 同步阻塞当前线程,直到 UI 运行s 代码。