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 我需要 运行 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
而不是 runSync
.
我如何 return 创建的 ImageDescriptor
的值,以便我可以将它传递给 super
构造函数?
可能 MessageConsole
的其他部分也必须在 UI 线程中 运行:
- 仅实例化和使用 class 扩展 class 设计以在 UI 线程中使用 喜欢
MessageConsole
当且仅当 确实需要它时 (例如,使用延迟加载;对于单例,您可以使用 initialization-on-demand holder idiom)。
- 如果在非UI线程中需要class,包装一切,通过
new ...
实例化和方法调用, 需要在 syncExec()
or asyncExec()
. 的 UI 线程中调用
我有一个 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 我需要 运行 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
而不是 runSync
.
我如何 return 创建的 ImageDescriptor
的值,以便我可以将它传递给 super
构造函数?
可能 MessageConsole
的其他部分也必须在 UI 线程中 运行:
- 仅实例化和使用 class 扩展 class 设计以在 UI 线程中使用 喜欢
MessageConsole
当且仅当 确实需要它时 (例如,使用延迟加载;对于单例,您可以使用 initialization-on-demand holder idiom)。 - 如果在非UI线程中需要class,包装一切,通过
new ...
实例化和方法调用, 需要在syncExec()
orasyncExec()
. 的 UI 线程中调用