2012-01-24 13 views
0

私は上記のエラーが発生するSwingでURIを開こうとしています。NoClassDefFoundError:java/awt/Desktopを取得するのはなぜですか?

理由は何ですか。どのように修正できますか?

私はコンソールでそれを行うときはすべてOKですが、私がGUIで行うとこのエラーが発生します。 Weblogicをサーバーとして使用していると言えます。

コード

private static void open(URI uri) { 
    if (Desktop.isDesktopSupported()) { 
     try { 
      Desktop.getDesktop().browse(uri); 
     } catch (IOException e) { /* TODO: error handling */ } 
    } else { /* TODO: error handling */ } 
} 

スタックトレース:

Exception in thread "AWT-EventQueue-1" java.lang.NoClassDefFoundError: java/awt/Desktop 
at be.azvub.ext.bcfidownloder.BcfiDownloadPanel.open(BcfiDownloadPanel.java:230) 
at be.azvub.ext.bcfidownloder.BcfiDownloadPanel.access$000(BcfiDownloadPanel.java:37) 
at be.azvub.ext.bcfidownloder.BcfiDownloadPanel$7.actionPerformed(BcfiDownloadPanel.java:147) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 
at java.awt.Component.processMouseEvent(Component.java:5517) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3129) 
at java.awt.Component.processEvent(Component.java:5282) 
at java.awt.Container.processEvent(Container.java:1966) 
at java.awt.Component.dispatchEventImpl(Component.java:3984) 
at java.awt.Container.dispatchEventImpl(Container.java:2024) 
at java.awt.Component.dispatchEvent(Component.java:3819) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822) 
at java.awt.Container.dispatchEventImpl(Container.java:2010) 
at java.awt.Window.dispatchEventImpl(Window.java:1791) 
+5

このコードを実行しているJREの[java.version](http://pscode.org/prop/?prop=java.version)とは何ですか? ['Desktop'](http://docs.oracle.com/javase/7/docs/api/java/awt/Desktop.html)は1.6以上のクラスです。 –

+1

これに加えて、これにはSwingタグがありますが、WebLogicサーバーについて言及しています(サーバーは「ヘッドレス」の可能性があります - GUIは使用できません)。これは私を混乱させる。このコードは、サーバー上またはリモートクライアント上で実行されていますか? –

答えて

0

docオンNoClassDefFoundError

検索対象のクラス定義は、現在実行中のクラスがコンパイルされたときに存在しましたが、定義が見つからなくなりました。

不正なクラスローディングが発生しています。主にクラスローダの連鎖が間違っているためです。

+0

@itro私の答えは完全ではありませんでしたが、ヒントに過ぎませんでした。それが助けてくれてうれしい。「本当の修正」は何でしたか? – Jayan

0

NoClassDefFoundErrorだけクラスパス問題が原因で発生することができます。

DesktopJREの一部であるため、あなたのクラスパスJREライブラリへの参照が含まれていることを確認してください。

は、Eclipse では、実行構成に行くことができます - >クラスパス

UPDATEがチェック:アンドリューが示唆したように

、あなたはまた、あなたが持ってチェックすることができ、少なくともJava 1.6

+1

JREがクラスパスにない場合、 'URI'は見つからないでしょう。 –

+0

本当ですか?私は、Javaの最初のバージョンのCLASSPATHにJREライブラリだけが必要だと思います。 –

+0

@AndrewThompsonおそらく彼のクラスパスは混乱していて、その中のjarの1つに不完全なjreが含まれていて、これはURIが見つかった場所から来たものです –

0

java.awt.Desktopin Java 6が導入されました。異なるJREバージョンでコードを実行している可能性が高いです。

関連する問題