代码之家  ›  专栏  ›  技术社区  ›  John Doe

返回在runSync方法中创建的对象的值

  •  0
  • John Doe  · 技术社区  · 7 年前

    我有一个类扩展了 MessageConsole 类,该类需要其超级构造的实例 super(String name, ImageDescriptor imgDescriptor) . 用于创建 ImageDescriptor 如下所示:

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

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

    我读过 here 我需要在其中运行函数 sync async 模式,以便在UI上正确执行操作,因此我创建了以下方法:

    private static ImageDescriptor createImageDescriptor() {
        Activator.getMyService().runSync(new Runnable() {
    
            public void run() {
               ImageDescriptor.createFromImage(Activator.getImage(SharedImages.JUSTIFICATION));
            }
        });
    
        return null;
    }
    

    runSync 是一个包装的 syncExec ,它在调用之前添加了一些检查。你可以考虑 syncExec公司 而不是 运行同步 .
    我如何返回创建的 图像描述符 所以我可以把它传给 super 构造函数?

    1 回复  |  直到 7 年前
        1
  •  1
  •   howlger df778899    7 年前

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

    • 只有 实例化和使用 扩展 在UI线程中使用的类设计 喜欢 消息控制台 如果真的需要 (例如,使用延迟加载;对于单例,可以使用 initialization-on-demand holder idiom ).
    • 如果非UI线程中需要该类, 包装所有内容 ,实例化通过 new ... 需要在中的UI线程中调用 syncExec() or asyncExec() .