SWT-basiertes, plattformübergreifendes JAR ordnungsgemäß auf einem Mac ausführen

Habe ich die Arbeit an einer SWT-basierte Projekt soll bereitgestellt werden als Java-Web-Start, und so auf mehreren Plattformen.

So weit ich es geschafft haben, zur Bewältigung der Export problem, dass sich aufgrund der system-spezifischen Bibliotheken SWT abhängt (siehe entsprechenden thread). Die resultierende jar-scheint zu funktionieren beginnen, gut auf 32/64-bit-linux und 64-bit-windows, aber die Ausführung kann nicht auf einem Mac mit der folgenden Ausgabe:

$ 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.<init>(MarqueeSelectionTool.java:99)
   at org.gvt.MarqueeZoomTool.<init>(MarqueeZoomTool.java:16)
   at org.gvt.action.MarqueeZoomToolAction$1.<init>(MarqueeZoomToolAction.java:28)
   at org.gvt.action.MarqueeZoomToolAction.createTool(MarqueeZoomToolAction.java:28)
   at org.gvt.action.AbstractGEFToolAction.<init>(AbstractGEFToolAction.java:24)
   at org.gvt.action.MarqueeZoomToolAction.<init>(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.<init>(Unknown Source)
   at org.eclipse.swt.widgets.Display.<init>(Unknown Source)
   at org.eclipse.swt.widgets.Display.<init>(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.<init>(Unknown Source)
   at org.eclipse.swt.graphics.Cursor.<init>(Unknown Source)
   at org.eclipse.draw2d.Cursors.<clinit>(Cursors.java:170)
   ... 16 more

Habe ich überprüft eine Reihe von relevanten threads: (Kann nicht SWT Display, über Mac OS XProbleme Mit SWT unter Mac) sowie die UI-Thread-Eintrag auf der SWT-FAQ und tutorials wie Bringen Sie Ihre Java-Anwendung auf dem Mac und Die Bereitstellung von SWT-Anwendungen auf Mac OSX.

Es ist mein Verständnis, dass das problem stammt vom thread-handling unter Mac OSX, und ich sollte versuchen, implementieren Sie das JVM-argument -XstartOnFirstThread in der Ausführung. Ist das richtig?

Unter der Annahme, dass mein Verständnis des Problems ist korrekt, ich bin ein bisschen verwirrt, als diese software soll cross-Plattform und deren Ausführung auf javaws. Brauche ich zum erstellen einer info.plist Datei, wenn ja, wo in dem Paket und wie, ansonsten, wie kann ich "bedingt" pass das argument JVM zum Zeitpunkt der Ausführung?

Vielen Dank im Voraus,

InformationsquelleAutor der Frage posdef | 2010-10-20

Schreibe einen Kommentar