24

私はswtを学ぼうとしています.すべてのビルドにmavenを使用し、IDEにはEclipseを使用しています. maven リポジトリから swt jar を取得すると、次のようになります。

Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-pi-gtk-3034 in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1030)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:100)
    at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:19)
    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:112)
    at wenzlick.test.swt.main.Main.main(Main.java:30)

mavenを使用してswtアプリをビルドして実行することに成功した人はいますか?

編集:少し調査したところ、問題が見つかりました。下の私の投稿を見てください

4

6 に答える 6

19

最新の SWT バージョン (4.2.2) の win32/64 & osx アーティファクトを googlecode リポジトリにアップロードしました。ここで見つけることができます。

https://swt-repo.googlecode.com/svn/repo/

これを使用するには、pom.xml に次のコードを記述します。

<repositories>
    <repository>
        <id>swt-repo</id>
        <url>https://swt-repo.googlecode.com/svn/repo/</url>
    </repository>
</repositories>

次に、プラットフォームに関連する SWT 依存関係を参照するだけです。例えば:

    <dependency>
        <groupId>org.eclipse.swt</groupId>
        <artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
        <version>4.2.2</version>
    </dependency>

他のプラットフォームの場合は、artifactId を適切な値に置き換えてください。

  • org.eclipse.swt.win32.win32.x86
  • org.eclipse.swt.win32.win32.x86_64
  • org.eclipse.swt.cocoa.macosx
  • org.eclipse.swt.cocoa.macosx.x86_64

追加のプラットフォームや古いバージョンのアーティファクトも利用できます。上記のリポジトリ リンクにアクセスして見つけてください。

ハッピーコーディング!

于 2012-04-02T23:32:42.100 に答える
9

Maven が古いバージョンの SWT を取り込んでいるようです。v3.4 (およびそれ以降) では、必要なのは swt.jarだけです.soSWT は、必要に応じて、 s、.jnilibs、またはsを自動的に抽出し.dllます。唯一注意が必要なのは、適切な swt.jar (使用しているプラ​​ットフォームの意味) を確実に取得することです。

SWT 3.4 を手動でローカル リポジトリにインストールしてみてください。それでも同じ問題が発生する場合は、何か問題がある可能性があります。その後、.so手動で s を抽出してから、呼び出しjava.library.pathのスイッチを使用して変数を指定してみます。-DLinux では、依存関係の問題 (libpango など) が原因で、ライブラリのロードが失敗することがあります。このような場合、多くの場合、エラーは単に一般的なものUnsatisifedLinkErrorであり、問​​題のデバッグが困難になります。

于 2008-11-15T17:37:54.617 に答える
5

2013年(このポスト開始年)以来、状況は変化しました。SWTがMavenCentralで公開されるようになりました。この記事の執筆時点での座標は次のとおりです。

<dependency>
    <groupId>org.eclipse.platform</groupId>
    <artifactId>org.eclipse.swt.win32.win32.x86_64</artifactId>
    <version>${swt.version}</version>
</dependency>

このチケットはおもしろいと思うかもしれません。

Windows 64ビット用の最新のSWTアーティファクト:https ://mvnrepository.com/artifact/org.eclipse.platform/org.eclipse.swt.win32.win32.x86_64

于 2013-03-18T21:27:17.510 に答える
2

UnsatisfiedLinkErrorの API から

Java 仮想マシンがネイティブと宣言されたメソッドの適切なネイティブ言語定義を見つけられない場合にスローされます。

私自身は試したことはありませんが、メインの SWT jar をダウンロードするだけでなく、プラットフォームの「ネイティブ」JAR をサポートする必要があると思います。たとえば、Linux を使用している場合は、swt-linux-gtk ですか?

于 2008-11-15T17:28:09.770 に答える
1

これについてもう少し調査したところ、swtjarがMavenリポジトリのいくつかの異なる場所にあることがわかりました。swtグループが出したjarを使っていたのですが、少し見てみると、Linux用のorg.eclipse.swt.gtk.linuxグループ(Windowsの場合はorg.eclipse.swt.win32.win32)が出したjarが見つかりました。 )。これは、swtの3.3バージョン用です。まだ3.4を探しています。

于 2008-11-20T01:56:19.180 に答える