Return 在 runSync 方法中创建的对象的值

Return the value of an object created in a runSync method

我有一个 class 扩展了 MessageConsole class,它需要一个它的超级构造函数 super(String name, ImageDescriptor imgDescriptor) 的实例。用于创建 ImageDescriptor 的方法如下:

ImageDescriptor.createFromImage(Activator.getImage(SharedImages.SPECIFIC_IMAGE));

此方法随机导致org.eclipse.swt.SWTError: Invalid thread access,因为在调用它的那一刻,workbench可能会启动,也可能不会启动。

我读到 here 我需要 运行 syncasync 模式下的功能,以便在 UI 上正确执行操作,因此我创建了以下方法:

private static ImageDescriptor createImageDescriptor() {
    Activator.getMyService().runSync(new Runnable() {

        public void run() {
           ImageDescriptor.createFromImage(Activator.getImage(SharedImages.JUSTIFICATION));
        }
    });

    return null;
}

runSyncsyncExec 的包装器,它在调用它之前添加了一些检查。你可以考虑 syncExec 而不是 runSync.
我如何 return 创建的 ImageDescriptor 的值,以便我可以将它传递给 super 构造函数?

可能 MessageConsole 的其他部分也必须在 UI 线程中 运行:

  • 实例化和使用 class 扩展 class 设计以在 UI 线程中使用 喜欢 MessageConsole 当且仅当 确实需要它时 (例如,使用延迟加载;对于单例,您可以使用 initialization-on-demand holder idiom)。
  • 如果在非UI线程中需要class,包装一切,通过new ...实例化和方法调用, 需要在 syncExec() or asyncExec().
  • 的 UI 线程中调用