0

SWT でアプリケーションを作成し、その jar をエクスポートすると、実行できました。私のマシンは(win XP)です。

および私の Java バージョン: Java バージョン "1.6.0_39" Java(TM) SE ランタイム環境 (ビルド 1.6.0_39-b04) Java HotSpot(TM) クライアント VM (ビルド 20.14-b01、混合モード、共有)

次に、Windows 7 のマシンで jar を実行しようとしました: Java バージョン "1.7.0_17" Java(TM) SE ランタイム環境 (ビルド 1.7.0_17-b02) Java HotSpot(TM) 64 ビット サーバー VM (ビルド 23.7-b01) 、 ミックスモード)

しかし、このマシンはアプリケーションを起動できませんでした。次に、Java -jar myapp.jar を使用して CMD で Jar を実行しようとしましたが、例外が発生しました:`

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58)Caused by: java.lang.UnsatisfiedLinkError: Cannot load 32-bit SWT libraries on 64-bit JVM
    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
    at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
    at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
    at projectPackage.G.init(G.java:258)
    at projectPackage.G.main(G.java:225)
    ... 5 more`

私のEclipseはjre6を使用しています

では、両方のマシンで動作するように Jar を生成するにはどうすればよいでしょうか?

お時間をいただきありがとうございます

4

2 に答える 2

1

問題はあなたのswt dllから来ています:それらは32ビットJava用で、Win7 64ビットOSを持っています。ここに移動して、適切な jar をダウンロードしますhttp://download.eclipse.org/eclipse/downloads/drops4/R-4.3-201306052000/#SWT 今、すべてのアーキテクチャで利用できるようにするには、OS に従ってライブラリをダウンロードする必要があります、実行時に次のようにロードします。

URLClassLoader child = new URLClassLoader (swtJar.toURL(), this.getClass().getClassLoader());
Class classToLoad = Class.forName ("org.eclipse.swt.widgets.Display", true, child);
Method method = classToLoad.getDeclaredMethod ("getDefault");
Object instance = classToLoad.newInstance ();
Object result = method.invoke (instance);

または、私の jnlp ファイルを使用できます。

<resources os="Windows" arch="x86">
    <nativelib href="swt-native-win32-windows-x86.jar" />
</resources>

<resources os="Windows" arch="x86_64">
    <nativelib href="swt-native-win32-windows-x86_64.jar" />
</resources>
于 2013-09-04T11:45:43.907 に答える
1

まあ、例外は自明です:

UnsatisfiedLinkError: 64 ビット JVM に 32 ビット SWT ライブラリを読み込めません

jar を 32 ビットと 64 ビットの両方で動作させるには、次の回答をご覧ください。

クロスプラットフォームの Java SWT アプリケーションを作成する

基本的に、アプリをデプロイする予定のすべてのプラットフォームに swt.jar を含める必要があります。指定されたコードによって、使用する .jar のバージョンが実行時に決定されます。


手っ取り早い修正方法は、jar ファイルを開き、含まれている swt.jar (32 ビット) を別のバージョン (64 ビット) と交換することです。ただし、これはアプリを 64 ビットに制限します。


結論

  • 異なる OS およびビット バージョン用に個別の jar を作成します (それぞれに 1 つの swt.jar のみが含まれます)。
  • または、1 つの jar を作成してすべてを支配します (すべての swt.jar を含みます)。
于 2013-09-04T11:37:43.877 に答える