Java 返回在runSync方法中创建的对象的值
我有一个类扩展了Java 返回在runSync方法中创建的对象的值,java,eclipse,eclipse-plugin,eclipse-rcp,Java,Eclipse,Eclipse Plugin,Eclipse Rcp,我有一个类扩展了MessageConsole类,该类需要它的超级构造函数的一个实例super(字符串名,ImageDescriptor imgDescriptor)。用于创建图像描述符的方法如下: ImageDescriptor.createFromImage(Activator.getImage(SharedImage.SPECIFIC_IMAGE)) 此方法随机导致org.eclipse.swt.swt错误:线程访问无效,因为在调用它时,工作台可能会启动,也可能不会启动 我了解到我需要在sy
MessageConsole
类,该类需要它的超级构造函数的一个实例super(字符串名,ImageDescriptor imgDescriptor)
。用于创建图像描述符的方法如下:
ImageDescriptor.createFromImage(Activator.getImage(SharedImage.SPECIFIC_IMAGE))代码>
此方法随机导致org.eclipse.swt.swt错误:线程访问无效
,因为在调用它时,工作台可能会启动,也可能不会启动
我了解到我需要在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
的包装,它在调用它之前添加一些检查。您可以考虑<代码> SycExcRe>代码>而不是<代码> RunSyc> < /C>。
如何返回所创建的ImageDescriptor
的值,以便将其传递给super
构造函数?可能MessageConsole
的其他部分也必须在UI线程中运行:
- 只有实例化并使用一个类,该类扩展了类设计以在UI线程中使用,如
MessageConsole
当且仅当确实需要时才使用(例如,使用延迟加载;对于单例,可以使用)
- 如果类在非UI线程中是必需的,包装所有内容,则通过
new…
进行实例化,并调用需要在中的UI线程中调用的方法
我也不能在run
方法中调用super()?在这里,您可以看到扩展MessageConsole
的类是如何使用的:@howlger哦,现在我明白了,您指的是扩展MessageConsole
的类的构造函数当调用它时,应该在UIThread
中调用它。由于实现的原因,类的实例被保存在一个静态最终MyClass实例中
,我也有同样的问题,我以后无法从UIThread
中访问该值。如果在UIThread中使用MyClass
,则静态最终MyClass实例不是一个好主意,因为它会杀死延迟加载模式,同时也因为UI资源。@howlger我知道,但目前我只是在维护项目,因此,不幸的是,我不能去重新发明轮子