gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:41:28 25 4
gpt4 key购买 nike

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

例如:

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

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

不幸的是,我无法传递对此 DSF 扩展实现的任何引用。我尝试使用以下代码来获取 Eclipse View ,以便随后设置文本(这是该 View 的属性):

IViewPart vp = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("com.example.myview");

但是,我在调用时收到以下异常:

Exception in thread "MI RX Thread" java.lang.NullPointerException

知道如何访问 UI 线程来检索 View 的属性以进行设置吗?

最佳答案

您提到的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 运行代码。

关于java - 如何从 Eclipse 命令调用的类实例设置 SWT Text 元素的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41565444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com