我有插件项目,我正在使用
Display display = new Display(); // twice
此插件在Windows上正常运行。
但是当我在Linux上运行插件时会抛出一个错误:
org.eclipse.swt.SWTError: Not implemented [multiple displays]
Root exception:
org.eclipse.swt.SWTError: Not implemented [multiple displays]
at org.eclipse.swt.SWT.error(SWT.java:4423)
at org.eclipse.swt.widgets.Display.checkDisplay(Display.java:767)
at org.eclipse.swt.widgets.Display.create(Display.java:908)
at org.eclipse.swt.graphics.Device.<init>(Device.java:156)
at org.eclipse.swt.widgets.Display.<init>(Display.java:507)
at org.eclipse.swt.widgets.Display.<init>(Display.java:498)
at com.test$OpenPage.run(test.java:267)
at org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage$29.run(AbstractRepositorySettingsPage.java:1964)
at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
我在Windows 7 / 8.1 / 10(工作正常)和Ubuntu(不工作)上测试过它
答案 0 :(得分:2)
在某些平台上,SWT不允许创建多个显示器。
但是,插件代码根本不应创建Display
。在工作台启动期间,将为您创建一个可以通过
PlatformUI.getWorkbench().getDisplay()
或通过从现有小部件获取显示,例如:
void createControls( Composite parent ) {
Display display = parent.getDisplay();
...
答案 1 :(得分:1)
对多个Display
对象的支持因平台而异。查看源代码,Linux / GTK或macOS不支持。
要获得完全的便携性,您需要坚持使用单个Display
设备。通常没有必要使用多个。