0

やあ、

javaws 経由で起動するアプリケーションを開発しました。アプリケーション自体は、Linux (ubuntu 10.04 LTS)、Windows 7、および Mac OS で実行するようにテストされています。swt を使用しており、ローカルで起動した場合、これらすべてのプラットフォームで問題なく実行されます。

いくつかの苦労の後、アプリケーションはすべてのアーキテクチャを備えた Linux および Windows マシンで非常にうまく起動します (Mac ではない場合)。

macOS で swt アプリケーションを実行するには、java-vm を指定する必要があり、javaws でXstartOnFirstThread同じことを行うには、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+") で試してみました。

Macでローカルに実行するとjar自体が完全に実行されるため、引数javaws-vm-args="-XstartOnFirstThread"またはjava-vm-args="-XstartOnFirstThread"(インターネット上で「ws」部分の有無にかかわらずこの引数を見つけ、両方を試した)がjavawsによって渡されないと思われます。

実際の問題は、可能なすべての引数の組み合わせで、アプリケーションが常に次の例外で終了することです。

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)

改めてスペックはこんな感じ。

  • OS: MacOS 10.6 (Snow Leopard) 64 ビット
  • Java ランタイム 1.6 64 ビット
  • SWT バージョン: 3.6.2-cocoa-macosx-x86_64

誰かが同じ問題を抱えていて、それを修正できたことを願っています。すべての回答について事前にthx、

乾杯ストップパル

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 に答える