那里,
我开发了一个应用程序,它将通过javaws启动,应用程序本身经过测试可在linux(ubuntu 10.04 LTS),Windows 7和mac OS上运行。如果在本地启动,它正在使用swt并在所有这些平台上运行而没有问题。
经过一番努力之后,应用程序现在开始在Linux和Windows机器上完成所有体系结构,如果它不是用于mac!我知道要在macOS下运行swt应用程序需要给java-vm XstartOnFirstThread
,并且对javaws执行相同操作jnlp文件需要以下ressource标记:
<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>
在这个question macOS中讨论过,可能会遇到swt和j2se="xy"
定义的问题,所以我尝试使用特定的一个,根本没有(甚至不是全局的)和“泛型”一个(例如:j2se="1.5+"
)。
我怀疑论证javaws-vm-args="-XstartOnFirstThread"
或java-vm-args="-XstartOnFirstThread"
(在互联网上发现这个带有和没有“ws”部分的论点并尝试过两者)不会被javaws传递,因为jar本身正在运行在Mac上本地执行时非常完美。
现在的实际问题是,在每个可能的争论组合中,应用程序总是以下列异常退出:
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)
以下是规格:
我希望有人遇到同样的问题并能够解决问题,提前做好所有答复,
欢呼stoppal
答案 0 :(得分:2)
因此,对于那些与同一问题斗争的人,或者只是想要一个正常运行的jnlp文件作为参考,这是我的:
<?xml version="1.0" encoding="UTF-8" ?>
<jnlp spec="1.0+" codebase="http://your-host:8080/folder_with_jar_stuff/" href="webstart.jnlp">
<information>
<title>Your Applications Title</title>
<vendor>Your name or company or whatever</vendor>
<homepage href="http://www.a-really-funny-domain.com" />
<description>This application does something really usefull and will make the world a better place due to it being lorem ipsum...</description>
<icon kind="splash" href="splash.bmp"/>
</information>
<security>
<all-permissions />
</security>
<resources>
<jar href="your_app_as_jar.jar" />
</resources>
<resources os="Linux" arch="x86_64">
<nativelib href="swt-native-3.6.2-gtk-linux-x86_64.jar" />
</resources>
<resources os="Linux" arch="amd64">
<nativelib href="swt-native-3.6.2-gtk-linux-x86_64.jar" />
</resources>
<resources os="Linux">
<nativelib href="swt-native-3.6.2-gtk-linux-x86.jar" />
</resources>
<resources os="Mac" arch="x86_64">
<j2se version="1.6" java-vm-args="-XstartOnFirstThread" />
<nativelib href="swt-3.6.2-cocoa-macosx-x86_64.jar" />
</resources>
<resources os="Windows" arch="x86">
<nativelib href="swt-native-3.6.2-win32-x86.jar" />
</resources>
<resources os="Windows" arch="x86_64">
<nativelib href="swt-native-3.6.2-win32-x86_64.jar" />
</resources>
<resources os="Windows" arch="amd64">
<nativelib href="swt-native-3.6.2-win32-x86_64.jar" />
</resources>
<resources>
<jar href="log4j-1.2.16.jar" />
</resources>
<application-desc main-class="package.contains.class.with.main.method.ClassName" />
</jnlp>
我知道这远非完整,但它对我有用。其他有用的链接是: A JNLP tag refference list 不管你信不信,来自oracle的specification。
答案 1 :(得分:1)
JNLP文件无效。点击JaNeLA&amp;纠正任何结果为红色,然后想知道为什么它可能会失败,或其他系统。