やあ、
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、
乾杯ストップパル