为什么webstart应用无法在Mac上启动? (缺少vmarg)

时间:2011-07-28 09:26:28

标签: macos swt java-web-start jvm-arguments

那里,

我开发了一个应用程序,它将通过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)

以下是规格:

  • 操作系统:MacOS 10.6(Snow Leopard)64位
  • Java Runntime 1.6 64位
  • SWT版本:3.6.2-cocoa-macosx-x86_64

我希望有人遇到同样的问题并能够解决问题,提前做好所有答复,

欢呼stoppal

2 个答案:

答案 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;纠正任何结果为红色,然后想知道为什么它可能会失败,或其他系统。