2009-08-07 24 views
0

私はEclipse初心者です。AWT/SWTの混合アプリケーションを構築しようとしています。ここに私のコードだ:AWTとSWTを混在させたときのJava UnsatisfiedLinkError?

public class HelloWorldSWT { 

    public static void main(String[] args) { 
     Frame frame = new Frame("My AWT Frame"); // java.awt.Frame 
     frame.setLayout(new BorderLayout()); 
     Canvas canvas = new Canvas(); // java.awt.Canvas 
     frame.add(canvas, BorderLayout.CENTER); 
     frame.setVisible(true); 

     Display display = new Display(); // display object to manage SWT lifecycle. 
     Shell swtShell = SWT_AWT.new_Shell(display, canvas); 
     Button m_button = new Button(swtShell, SWT.PUSH); 
     m_button.setText("button"); 

     // invoke the AWT frame rendering by making the frame visible 
     // This starts the EDT 
     frame.setVisible(true); 

     // standard SWT dispatch loop 
     while(!swtShell.isDisposed()) 
     { 
      if(!display.readAndDispatch()) 
       display.sleep(); 
     } 
     swtShell.dispose(); 
    } 
} 

これは罰金コンパイルが、私はEclipseでアプリケーションとして、それを実行すると、私は次のエラーを取得する:

Exception in thread "main" java.lang.UnsatisfiedLinkError: sun.awt.SunToolkit.getAppContext(Ljava/lang/Object;)Lsun/awt/AppContext; at sun.awt.SunToolkit.getAppContext(Native Method) at sun.awt.SunToolkit.targetToAppContext(Unknown Source) at sun.awt.windows.WComponentPeer.postEvent(Unknown Source) at sun.awt.windows.WComponentPeer.postPaintIfNecessary(Unknown Source) at sun.awt.windows.WComponentPeer.handlePaint(Unknown Source) at sun.java2d.d3d.D3DScreenUpdateManager.repaintPeerTarget(Unknown Source) at sun.java2d.d3d.D3DScreenUpdateManager.createScreenSurface(Unknown Source) at sun.awt.windows.WComponentPeer.replaceSurfaceData(Unknown Source) at sun.awt.windows.WComponentPeer.replaceSurfaceData(Unknown Source) at sun.awt.windows.WComponentPeer.setBounds(Unknown Source) at sun.awt.windows.WWindowPeer.setBounds(Unknown Source) at sun.awt.windows.WComponentPeer.initialize(Unknown Source) at sun.awt.windows.WCanvasPeer.initialize(Unknown Source) at sun.awt.windows.WPanelPeer.initialize(Unknown Source) at sun.awt.windows.WWindowPeer.initialize(Unknown Source) at sun.awt.windows.WFramePeer.initialize(Unknown Source) at sun.awt.windows.WComponentPeer.(Unknown Source) at sun.awt.windows.WCanvasPeer.(Unknown Source) at sun.awt.windows.WPanelPeer.(Unknown Source) at sun.awt.windows.WWindowPeer.(Unknown Source) at sun.awt.windows.WFramePeer.(Unknown Source) at sun.awt.windows.WToolkit.createFrame(Unknown Source) at java.awt.Frame.addNotify(Unknown Source) at java.awt.Window.show(Unknown Source) at java.awt.Component.show(Unknown Source) at java.awt.Component.setVisible(Unknown Source) at java.awt.Window.setVisible(Unknown Source) at HelloWorldSWT.main(HelloWorldSWT.java:20)

は私が間違って何をしているのですか?

答えて

3

、SWTは自動的に(JARコンテンツのトップレベルで)swt.jar内にあるその必要なプラットフォーム固有のライブラリーを、発見。だから、クラスパスでswt.jarだけが必要です。それは動作します。

UnsatisifiedLinkErrorを取得する方法の1つは、別のプラットフォーム用にswt.jarを使用している場合です。これらはすべて「swt.jar」という名前です。たとえば、Linux用のものをダウンロードしてWindows上で使用しようとするとします。すべてのAPIレベルのコードはすべてのプラットフォームで同じJavaであるため、プロジェクトは正常にコンパイルされますが、ネイティブライブラリが間違っているため実行すると失敗します。

ただし、この場合のエラーはAWTで発生するため、SWTに直接関連するものではない可能性があります。まず、Windows SWTリリースをダウンロードしたことを確認してください。ワークスペースにインポートすると、org.eclipse.swtという名前のEclipseプロジェクトが作成されます。このプロジェクトにはswt.jarが含まれています。その後、org.eclipse.swtをプロジェクトに必要なプロジェクトにします。有効なクリーンなJRE([ウィンドウ - >環境設定 - > Java - >インストールされたJRE]を定義してみてください。またはインストールした別のものを使用してください)。

また、シェル/コマンドウィンドウからテストすることもできます。プロジェクトディレクトリに移動します。私は(Vistaの-32、JDK 6_15)を実行するようにコードを得たが、窓は本当に小さな開き、近くないだろう

java -cp bin;..\org.eclipse.swt\swt.jar HelloWorldSWT 

:コマンドは、のように単純でなければなりません私はSWT-AWTブリッジについては何も知らないので、それと幸運です。

+0

ありがとう、私はこれを試してみましょう。 –

+0

私は間違ったSWT jarファイルを参照していました。ご協力いただきありがとうございます。 –

1

UnsatisfiedLinkErrorは、アプリケーションを実行しようとしているときに依存しているネイティブライブラリが見つからないことを示しています。 IDEでこれをコンパイルする場合、ライブラリはビルドパスにあります。 IDEでこれを実行していて、このエラーが発生した場合、ライブラリは実行パスにありません。実行ダイアログを確認して、ビルドパスにあるライブラリが実行パスにあることを確認します。

1

これは、JVMがネイティブライブラリを検出できないことを示しています。 AWT/SWTを混在させているので、JVMがSWTライブラリ(Windowsの場合は.dll、Linuxの場合は.so、Macの場合はわかりません)を見つけることはできません。私は、システムプロパティを使用してJavaにどこに見えるかを伝えるのは部分的です。バージョン3.3以来

-Djava.library.path=<absolute path to the .dll/.so that SWT needs> 
0

私はまったく同じ問題を抱えていて、Javaを完全に削除して再インストールするだけで解決できます。どういうわけか、ネイティブのAWTメソッドを含んでいるDLLの1つが、うまくいきませんでした。

0

私は私のJavaのバージョン

をチェックした後、私はそのJDKおよびJREを見つけ 、私は長い間、この情報を検索 、この問題を解決していましたが、私は私の問題を解決するためのものを見つけることができませんバージョン、たとえば

ため 異なり、私は私のファイルシステム上の1つの余分な文書を見つけた

JDK 1.4 JRE 1.4 JRE 1.5(エクストラ)

あなたはjreの新しいバージョンを削除する必要があります(jre1.5)

その後、私のメッセージは恵まれています。私はあなたの質問がある場合は 私に電子メールに接続することができます。 [email protected]

関連する問題