単一のクラスを持つ初期の Java Web Start アプリケーションがあります。これは Windows と Linux で動作しますが、Mac OS X では恐ろしい Invalid Thread Access エラーが発生します。私は丸 2 日かけてインターネットを探し回り、すべての解決策を実装しましたが、問題は解決しません。
私の理解では、SWT の呼び出しはメイン スレッドから行う必要があります。私が間違っている場合は修正してください。
アプリケーションのソース コード、jnlp ファイルの関連部分、および Mac でのエラー メッセージの 3 つのスニペットを以下に掲載します。質問は最後にあります。
Java ソースコード
package client;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
public class AccountWindow {
 public static void main(String[] args) {
  Display display = new Display(); **// error occurs here**
  Shell shell = new Shell(display); shell.open();
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch())
    display.sleep();
  }
  display.dispose();
 }
}
JNLP スニペット
<resources os="Mac\ OS\ X" arch="x86_64">
    <j2se version="1.5+" java-vm-args="-XstartOnFirstThread" />
    <nativelib href="swt-4.2-cocoa-macosx-x86_64.jar" />
</resources>
エラーメッセージ
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 client.AccountWindow.main(AccountWindow.java:16)
    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:1550)
    at com.sun.javaws.Launcher.executeMainClass(Launcher.java:1488)
    at com.sun.javaws.Launcher.doLaunchApp(Launcher.java:1299)
    at com.sun.javaws.Launcher.run(Launcher.java:114)
    at java.lang.Thread.run(Thread.java:637)
注意してください - http://www.eclipse.org/swt/faq.php#javawebstart
に
掲載されている display.syncExec ソリューションは適用できません。呼び出す前にディスプレイが必要だからです。ディスプレイを作成しようとすると、ここでエラーが発生します。
- JaNeLa を使用して jnlp ファイルを検証しましたが、赤いエラーはありません。
- 正しい swt ライブラリがロードされているため、<resources os="Mac\ OS\ X" arch="i386"> が正しく解釈されています。- http://thelinkjuicer.com/gannonline/client.jnlp
でエラーを再現できます
そして今、質問
ソースコードまたはjnlpスニペットでエラーを引き起こす何かを見ることができますか? 
二次的な質問: -XstartOnFirstThread 引数が実際に VM によって読み取られているかどうかをどのように確認できますか?