Java 从非Ui线程获取系统默认颜色
在我的一个班级中,我有以下代码:Java 从非Ui线程获取系统默认颜色,java,eclipse,swt,Java,Eclipse,Swt,在我的一个班级中,我有以下代码: private static final Color GREEN = new Color(null, 0, 255, 0); 我知道Display类提供以下方法: Display.getSystemColor(int id) 以返回“默认”系统颜色,而不是实例化新颜色。在非Ui线程中调用静态代码的上下文中获取显示实例的最佳解决方案是什么 在创建任何线程之前,执行主初始化中的所有UI信息调用。保存数据以供后续在非UI线程中使用。您必须使用Display.get
private static final Color GREEN = new Color(null, 0, 255, 0);
我知道Display类提供以下方法:
Display.getSystemColor(int id)
以返回“默认”系统颜色,而不是实例化新颜色。在非Ui线程中调用静态代码的上下文中获取显示实例的最佳解决方案是什么 在创建任何线程之前,执行主初始化中的所有UI信息调用。保存数据以供后续在非UI线程中使用。您必须使用
Display.getDefault().syncExec(…)
调用。在runnable中,可以执行类似于Display.getDefault().getSystemColor(…)
的操作。为了返回该值,您需要将其保存在runnable中的一个字段中,然后从调用方法访问该字段
由于执行的是
syncExec
,请确保不要进入死锁(UI调用您的服务,而试图调用UI的服务可能会导致死锁) 谢谢你的回答,但是我正在编写一个“库”eclipse插件,它没有访问主线程的权限。你可能可以获得显示,但是你不能在UI踏板之外发出任何与UI相关的调用,包括getSystemColor。如果成功,这意味着您处于UI线程。如果可能存在您不在UI线程中的情况,您应该保护自己,如我的回答所示。If可能在你的机器上工作而在另一台机器上失败。是的,你是对的。我正在使用我的答案获得一个显示,然后对其执行syncExec+谢谢你的回答。
PlatformUi.getWorkbench().getDisplay()