2012-01-15 30 views
0

由于我对Eclipse和Java相对较新,因此在命名上留下了任何错误。在添加外部.java和.class文件后获取NoClassDefFoundError异常

我正在编写一个实现外部API(Amazon Web Service API)的Android应用程序。下载的API文件包括一个包含.class文件的目录和一个包含.java文件的目录。

在添加这些作为依赖,我也做了以下内容:包含.java文件

  1. Eclipse的>项目属性 - > Java构建路径 - >来源 - >链接源 - >选择目录。

  2. Eclipse-> project properties-> java build path-> libraries-> add external class folder->选择包含.class文件的目录。

在这个配置下编译时,我得到以下错误:

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

重复错误一次每类文件。

要解决此问题,我删除了对外部类文件夹的引用,并且程序编译并运行。一旦然而到达代码段使用的API的方法之一,我得到了以下错误崩溃:

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

编辑

完整的堆栈跟踪:

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的完整堆栈跟踪吗?然后我们可以看到哪些代码需要这个特定的类。 – 2012-01-16 01:08:43

+0

我将堆栈跟踪添加到OP。我很欣赏迄今为止的帮助。 – SemperFly 2012-01-16 02:24:29

回答

1

首先,您需要链接包文件的根文件夹(例如,/classes /当classes文件夹包含例如com/amazon/some /或/ the/other ..由于类文件包含所有信息,因此不需要使用源文件。

然而,您可以添加包含Java文件的包的根目录(再次),以便您可以根据需要查看源代码。这样做的另一个好处是你可以看到方法参数的名称,因为它们是而不是存在于类文件中。在展开类文件夹的项目之后,通过单击“构建路径”选项卡库中的链接源执行此操作。

+0

我完全删除了之前对源代码/类文件的引用,并执行了以下操作:properties-> java build path-> libraries->添加外部类文件夹并选择上面称为“类”的文件夹。该程序编译,但是当我在运行时调用新的方法时,我得到了我上面发布的第二个错误(NoClassDefFoundError) – SemperFly 2012-01-16 00:09:44

+0

这听起来像你需要一些其他库,亚马逊API在运行时依赖。例如,完全可以使用“API”类(空类/方法定义)编译应用程序。这当然不会让你确信它将要运行。 – 2012-01-16 01:06:53

相关问题