web-dev-qa-db-ja.com

SWTライブラリ「UnsatisfiedLinkError:no swt-gtk-4233」をロードできません

私はJava初心者で、Eclipse Junoを介してGUIのSWTを使用して簡単なJavaプログラムを作成しました。コードは機能しており、プログラムはEclipse内で実行できるため、Eclipseの外で実行できるようにコンパイルして実行可能なjarファイルにしました。ターミナルを使用して実行しようとすると、このエラーが発生しました。

Exception in thread "main" Java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: 
no swt-gtk-4233 in Java.library.path
no swt-gtk in Java.library.path
Can't load library: /home/abody/.swt/lib/linux/x86_64/libswt-gtk-4233.so
Can't load library: /home/abody/.swt/lib/linux/x86_64/libswt-gtk.so

at org.Eclipse.swt.internal.Library.loadLibrary(Library.Java:331)
at org.Eclipse.swt.internal.Library.loadLibrary(Library.Java:240)
at org.Eclipse.swt.internal.C.<clinit>(C.Java:21)
at org.Eclipse.swt.internal.Converter.wcsToMbcs(Converter.Java:63)
at org.Eclipse.swt.internal.Converter.wcsToMbcs(Converter.Java:54)
at org.Eclipse.swt.widgets.Display.<clinit>(Display.Java:133)
at Class1.main(Class1.Java:12)

そのため、libswt-gtk-4233.soおよびその他のファイルが見つからないようです。ただし、.swtフォルダーを見ると、libswt-gtk-3740.soではなく4233がありました。

そのため、より最新のファイルを見つけようとしています。それはどういう意味ですか、SWTを更新する必要がありますか?どうしたの?

4
user96384

ファイルを/usr/lib/jniディレクトリに配置するために、swtへのシンボリックリンクを作成する必要があります。このサイトで解決策を見つけました: EclipseはSWTライブラリをロードできません

次のコマンドを使用します。

ln -s /usr/lib/jni/libswt-* ~/.swt/lib/linux/x86_64/
5
wolfg

そのため、libswt-gtk-4233.soおよびその他のファイルが見つからないようです。ただし、.swtフォルダーを見てみると、4233ではなくlibswt-gtk-3740.soがありました。

プラグイン自体にはそれらのライブラリがあります。

プロジェクトを右クリックします。
->プロパティ->ビルドパス
一度[Java Build Path]ウィンドウを開くと、Projectsのタブにorg.Eclipse.swt。%GUIが含まれます%。%PLATFORM%
(インポートしたプロジェクト)
クリックして展開します。
ネイティブライブラリの場所を編集します。
ワークスペースを選択してから、プロジェクト全体org.Eclipse.swt。%GUI%。%PLATFOM%
[OK]を押すと完了です。

約:

..soコンパイルして、実行可能なjarファイルにして、Eclipseの外部で実行できるようにしました。ターミナルを使用して実行しようとすると、このエラーが発生しました。


端末ではなくEclipseでどのように実行したかわかりません。だから、私はあなたが別のプラットフォームでそれをするつもりだったと思った。 (私のような)新しいものについては、以下を読んでください: Standard Widget Toolkit

.. SWTを呼び出すプログラムは移植可能ですが、ツールキットの実装は、その一部がJavaで記述されていても、プラットフォームごとに固有です...

SWTは、サポートが必要なすべての新しいGUIライブラリに移植する必要があります。 SwingやAWTとは異なり、SWTはJavaリリースの一部ではないため、SWTはすべてのJavaサポートプラットフォームで利用できるわけではありません...

SWT実装はプラットフォームごとに異なるため、プラットフォーム固有のSWTライブラリ(JARファイル)を各アプリケーションとともに配布する必要があります。

したがって、プロジェクトを特定のプラットフォームにエクスポートする場合は、そのプラットフォームでIDEを開き、プラグインのインポートを繰り返しますが、今回はそのプラットフォームに対して、ビルドパス-関連のないプロジェクト(プロジェクトを削除しない)。そして今、あなたはその特定のプラットフォーム用にコンパイルすることができます。

あるプラットフォームから別のプラットフォームに切り替える場合、プロジェクトに開発するときに、ビルドパスを編集して、そこにある無関係なプロジェクトを削除するだけです。

0
Federico Gallo