2016-10-26 2 views
1

У меня есть плагин в проект, в котором я используюSWTError: не реализовано [несколько дисплеев] в Eclipse, плагин Devlopment

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

в 'run' метод' PlatformUI .getWorkbench(). getWisplay(). syncExec'by 'PlatformUI.getWorkbench(). getActiveWorkbenchWindow(). getShell()' я получил оболочку, и теперь 'shell.getDisplay' работает для меня thnks Hermann и greg-449 –

ответ

1

Поддержка нескольких объектов Display варьируется между платформами. Если посмотреть на исходный код, это не поддерживается в Linux/GTK или macOS.

Для полной переносимости вам необходимо придерживаться единственного устройства Display. Как правило, не нужно использовать более одного.

+0

Второй дисплей 'открыто из некоторого действия, выполняемого на первом' Display', которое открывает 'org.eclipse.swt.browser.Browser', используя' org.eclipse.swt.widgets.Shell'. Мне нужно открыть «Дисплей» –

+1

Я не понимаю, почему для этого требуется другой дисплей. У меня есть много кода, использующих браузеры в оболочках, и им не нужен другой дисплей. Как и в другом ответе, в плагине Eclipse вы никогда не должны создавать отображение ** ** ** –

+0

Когда я создаю \t 'display = PlatformUI.getWorkbench(). GetDisplay();' \t 'shell = new Shell (отображение); ' Он дает' org.eclipse.swt.SWTException: недопустимый доступ к потоку. –

2

На некоторых платформах SWT не позволяет создавать несколько дисплеев.

Однако код плагина не должен создавать Display. Во время запуска верстак, дисплей создан для вас, что вы можете получить доступ либо через

PlatformUI.getWorkbench().getDisplay() 

или путем получения отображения от существующего виджета, например:

void createControls(Composite parent) { 
    Display display = parent.getDisplay(); 
    ... 

 Смежные вопросы

  • Нет связанных вопросов^_^