2012-01-15 14 views
0

私はEclipseとJavaに比較的新しいので、命名法で間違いをお許しください。外部の.javaファイルと.classファイルを追加した後にNoClassDefFoundError例外を取得する

私は、外部API(Amazon Web Service API)を実装しているAndroidアプリケーションを作成しています。ダウンロードされたAPIファイルには、.classファイルを含むディレクトリと.javaファイルを含むディレクトリが含まれます。 .javaファイルが含まれてい

  1. Eclipse->プロジェクトのプロパティ - > Javaのビルドpath->ソース - >リンクソース - >を選択したディレクトリ:

    は、依存関係としてこれらを追加することで、私は次のように行われています。

  2. Eclipse->プロジェクトプロパティ - > javaビルドパス - >ライブラリ - >外部クラスフォルダを追加 - > .classファイルを含むディレクトリを選択します。この構成の下で、コンパイル時に

、私は次のエラーを取得する:

java.lang.IllegalArgumentException: already added: Lcom/ECS/client/jax/VariationSummary; 
    Conversion to Dalvik format failed with error 1 

エラーがすべてのクラスファイルに対して一度繰り返されます。

これをトラブルシューティングするには、外部クラスフォルダへの参照を削除して、プログラムをコンパイルして実行してください。しかし、は、APIのメソッドの 1を利用したコード・セグメントに到達すると、私は次のエラーでクラッシュを取得:

01-15 15:29:20.756: E/AndroidRuntime(1038): java.lang.NoClassDefFoundError: com.ECS.client.jax.AWSECommerceService 

EDITを

のフルスタックトレース:

01-15 17:12:28.256: W/dalvikvm(1227): Unable to resolve superclass of Lcom/ECS/client/jax/AWSECommerceService; (365) 
01-15 17:12:28.296: W/dalvikvm(1227): Link of class 'Lcom/ECS/client/jax/AWSECommerceService;' failed 
01-15 17:12:28.296: E/dalvikvm(1227): Could not find class 'com.ECS.client.jax.AWSECommerceService', referenced from method com.giftme.Amazon.searchRequest 
01-15 17:12:28.296: W/dalvikvm(1227): VFY: unable to resolve new-instance 66 (Lcom/ECS/client/jax/AWSECommerceService;) in Lcom/giftme/Amazon; 
01-15 17:12:28.306: D/dalvikvm(1227): VFY: replacing opcode 0x22 at 0x0000 
01-15 17:12:28.306: D/dalvikvm(1227): VFY: dead code 0x0002-0033 in Lcom/giftme/Amazon;.searchRequest (Ljava/lang/String;)Z 
01-15 17:12:28.306: W/dalvikvm(1227): threadid=10: thread exiting with uncaught exception (group=0x40015560) 

01-15 17:12:28.306: E/AndroidRuntime(1227): FATAL EXCEPTION: Thread-13 
01-15 17:12:28.306: E/AndroidRuntime(1227): java.lang.NoClassDefFoundError: com.ECS.client.jax.AWSECommerceService 
01-15 17:12:28.306: E/AndroidRuntime(1227):  at com.giftme.Amazon.searchRequest(Amazon.java:21) 
01-15 17:12:28.306: E/AndroidRuntime(1227):  at com.giftme.Friend$InterestsRequestListener$4.parseDataAndSearch(Friend.java:359) 
01-15 17:12:28.306: E/AndroidRuntime(1227):  at com.giftme.Friend$InterestsRequestListener$4.run(Friend.java:329) 
01-15 17:12:28.306: E/AndroidRuntime(1227):  at java.lang.Thread.run(Thread.java:1019) 

ここでは21行目を参照しています。

AWSECommerceService service = new AWSECommerceService(); 
+0

NoClassDefFoundErrorの完全なスタックトレースを投稿できますか?次に、この特定のクラスが必要なコードを確認できます。 –

+0

スタックトレースをOPに追加しました。これまでの助けに感謝します。 – SemperFly

答えて

1

まず、パッケージファイルのルートフォルダをリンクする必要があります(例:/classes/classesフォルダに含まれる場合。 com/amazon/some/or/the/other ..すべての情報がクラスファイルに含まれているので、ソースファイルを使用する必要はありません。

ただし、Javaファイルを含むパッケージのルート(再度)を追加することができますので、必要に応じてソースを見ることができます。これのもう1つの利点は、メソッドファイルの名前がではなく、クラスファイルにがあることがわかります。これを行うには、クラスフォルダの項目を展開した後、[ビルドパス]タブライブラリのリンク元をクリックします。

+0

ソース/クラスファイルへの以前の参照を完全に削除し、プロパティ - > javaビルドパス - >ライブラリ - >外部クラスフォルダを追加し、上で参照したフォルダを「クラス」として選択しました。プログラムはコンパイルされますが、実行時に新しいメソッドを呼び出すと、上記のNoClassDefFoundErrorの2番目のエラーが発生します – SemperFly

+0

amazon APIが実行時に依存する他のライブラリが必要なようです。例えば、 "API"クラス(空のクラス/メソッド定義)だけでアプリケーションをコンパイルすることは可能です。それはもちろん、それが実行されるという確実性を与えません。 –

関連する問題