嘿那里,
我开发了一个通过 javaws 启动的应用程序,该应用程序本身经过测试可以在 linux(ubuntu 10.04 LTS)、windows 7 和 mac OS 上运行。如果在本地启动,它使用 swt 并在所有这些平台上运行而不会出现问题。
经过一番挣扎后,应用程序现在可以在所有架构的 linux 和 windows 机器上很好地启动,如果它不是用于 mac 的话!
我知道要在 macOS 下运行一个 swt 应用程序需要给 java-vmXstartOnFirstThread
并且对 javaws 做同样的事情 jnlp 文件需要以下资源标签:
<resources os="Mac">
<j2se version="1.5+" javaws-vm-args="-XstartOnFirstThread" />
<nativelib href="swt-3.6.2-cocoa-macosx-x86_64.jar" />
<jar href="swt-3.6.2-cocoa-macosx-x86_64.jar" />
</resources>
正如在这个问题中所讨论的, macOS 可能在 swt 和j2se="xy"
定义方面存在问题,所以我尝试了一个特定的,根本没有(甚至不是全局的)和“通用”的(例如:)j2se="1.5+"
。
我怀疑这个论点javaws-vm-args="-XstartOnFirstThread"
或java-vm-args="-XstartOnFirstThread"
(在互联网上发现这个论点有和没有“ws”部分并尝试了两者)不是由javaws传递的,因为当在mac上本地执行时,jar本身运行得非常完美。
现在的实际问题是,对于每个可能的参数组合,应用程序总是退出,但出现以下异常:
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 foo.bar.WebStartRunnable.<init>(WebStartRunnable.java:85)
at foo.bar.WebStartRunnable.main(WebStartRunnable.java:155)
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 com.sun.javaws.Launcher.executeApplication(Launcher.java:1909)
at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1847)
at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1609)
at com.sun.javaws.Launcher.run(Launcher.java:138)
at java.lang.Thread.run(Thread.java:680)
这是规格:
- 操作系统:MacOS 10.6(雪豹)64 位
- Java 运行时 1.6 64 位
- SWT 版本:3.6.2-cocoa-macosx-x86_64
我希望有人遇到同样的问题并且能够解决它,提前感谢所有答案,
欢呼停止