Java 如何从Eclipse命令调用的类的实例设置SWT文本元素的内容?
我通过扩展Java 如何从Eclipse命令调用的类的实例设置SWT文本元素的内容?,java,eclipse,swt,eclipse-cdt,eclipse-pde,Java,Eclipse,Swt,Eclipse Cdt,Eclipse Pde,我通过扩展ViewPart实现了一个Eclipse视图。在这个特定视图中,我还实现了一个文本输入字段text,以及一些执行特定Eclipse命令的按钮 例如: IHandlerService handlerService = (IHandlerService) PlatformUI .getWorkbench().getService( IHandler
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视图,以便随后设置文本(这是该视图的一个属性):
但是,我在打电话时收到以下例外情况:
Exception in thread "MI RX Thread" java.lang.NullPointerException
您知道如何访问UI线程来检索视图的属性以进行设置吗?您提到的
平台UI
代码必须在UI线程中运行
使用Display.asynceec
或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运行代码。您是英雄。我怎么会错过这个呢。正如您告诉我的,我已经有了它,但我只将方法的调用(从我的视图)放入run()。谢谢。
Display.getDefault().asyncExec(new Runnable() {
public void run() {
... code to run in UI thread
}
});