Запуск на основе SWT, кроссплатформенный jar правильно на Mac

Я работал над проектом на основе SWT, который предназначен для развертывания как Java Web Start и, таким образом, может использоваться на нескольких платформах.

Пока мне удалось решить проблему экспорта, которая возникает из-за системных библиотек, от которых зависит SWT (см. Соответствующий поток ). Полученный jar-файл, кажется, отлично работает на 32/64-битных Linux и 64-битных окнах, однако выполнение на Mac не выполняется со следующим выводом:

$ java -jar dist/test.jar 
Adding { file:/Volumes/LaCie/ChiBE_Local/swt/swt-cocoa-macosx-x86_64-3.6.1.jar } to the classpath
***WARNING: Display must be created on main thread due to Cocoa restrictions.
Exception in thread "main" java.lang.reflect.InvocationTargetException
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
   at java.lang.reflect.Method.invoke(Method.java:597)
   at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)
Caused by: java.lang.ExceptionInInitializerError
   at org.eclipse.gef.tools.MarqueeSelectionTool.(MarqueeSelectionTool.java:99)
   at org.gvt.MarqueeZoomTool.(MarqueeZoomTool.java:16)
   at org.gvt.action.MarqueeZoomToolAction$1.(MarqueeZoomToolAction.java:28)
   at org.gvt.action.MarqueeZoomToolAction.createTool(MarqueeZoomToolAction.java:28)
   at org.gvt.action.AbstractGEFToolAction.(AbstractGEFToolAction.java:24)
   at org.gvt.action.MarqueeZoomToolAction.(MarqueeZoomToolAction.java:20)
   at org.gvt.TopMenuBar.createBarMenu(TopMenuBar.java:113)
   at org.gvt.ChisioMain.createMenuManager(ChisioMain.java:617)
   at org.eclipse.jface.window.ApplicationWindow.addMenuBar(ApplicationWindow.java:235)
   at org.gvt.ChisioMain.main(ChisioMain.java:149)
   at org.gvt.RuntimeMain.main(RuntimeMain.java:14)
   ... 5 more
Caused by: org.eclipse.swt.SWTException: Invalid thread access
   at org.eclipse.swt.SWT.error(Unknown Source)
   at org.eclipse.swt.SWT.error(Unknown Source)
   at org.eclipse.swt.SWT.error(Unknown Source)
   at org.eclipse.swt.widgets.Display.error(Unknown Source)
   at org.eclipse.swt.widgets.Display.createDisplay(Unknown Source)
   at org.eclipse.swt.widgets.Display.create(Unknown Source)
   at org.eclipse.swt.graphics.Device.(Unknown Source)
   at org.eclipse.swt.widgets.Display.(Unknown Source)
   at org.eclipse.swt.widgets.Display.(Unknown Source)
   at org.eclipse.swt.widgets.Display.getDefault(Unknown Source)
   at org.eclipse.swt.widgets.Display$1.run(Unknown Source)
   at org.eclipse.swt.graphics.Device.getDevice(Unknown Source)
   at org.eclipse.swt.graphics.Resource.(Unknown Source)
   at org.eclipse.swt.graphics.Cursor.(Unknown Source)
   at org.eclipse.draw2d.Cursors.(Cursors.java:170)
   ... 16 more

Я проверил ряд соответствующих потоков: ( Can ' t получить SWT Display в Mac OS X , Проблемы с SWT на Mac ), а также запись UI Thread в FAQ по SWT и такие руководства, как Перенос вашего Java-приложения на Mac и Развертывание Приложения SWT в Mac OSX .

Насколько я понимаю, проблема возникает из-за обработки потоков в Mac OSX, и я должен попытаться реализовать аргумент JVM -XstartOnFirstThread при выполнении. Это правильно?

Предполагая, что я правильно понимаю проблему, я немного сбит с толку, поскольку это программное обеспечение предназначено для кроссплатформенности и запуска на челюсти. Нужно ли мне создавать файл info.plist , если да, то где и как в пакете, иначе как я могу «условно» передать этот аргумент JVM во время выполнения?

Заранее спасибо ,

23
задан Community 23 May 2017 в 11:47
поделиться