如何从 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.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
运行s 同步阻塞当前线程,直到 UI 运行s 代码。
我通过扩展 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.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
运行s 同步阻塞当前线程,直到 UI 运行s 代码。