0

嘿那里,

我开发了一个通过 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

我希望有人遇到同样的问题并且能够解决它,提前感谢所有答案,

欢呼停止

4

2 回答 2

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>

我知道这远未完成,但它对我有用。其他有用的链接是: 一个 JNLP 标签参考列表 ,不管你信不信,oracle 的规范

于 2011-07-29T08:07:52.197 回答
1

JNLP 文件无效。在想知道为什么它可能在这个、那个或其他系统上失败之前,用JaNeLA检查它并更正任何红色的结果。

于 2011-07-28T10:16:46.370 回答