Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从Eclipse命令调用的类的实例设置SWT文本元素的内容?_Java_Eclipse_Swt_Eclipse Cdt_Eclipse Pde - Fatal编程技术网

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
  }
});