首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Android上使用objenesis时的NoClassDefFoundError

在Android上使用objenesis时的NoClassDefFoundError
EN

Stack Overflow用户
提问于 2012-09-08 18:24:51
回答 1查看 1.7K关注 0票数 3

我正在开发一个安卓应用程序,它使用com.rits.cloningorg.objenesis.*库来深入克隆对象。其目的是在树结构类中添加两次或多次相同的对象,而不必担心原始对象引用的对象是同一个对象。因为常规的clone()只是浅拷贝对象,所以我使用了前面提到的库。

在开发android项目之前,我创建了一个java项目来实现我的树,它使用这些libs运行得很好。然后我将其导入到android项目中(并将com.rits.cloningorg.objenesis.*作为外部库添加,然后在Java Build Path > Order and Export中检查这两个库)。但是当我运行它时,就在我调用deepClone()的行中,这个错误出现在LogCat中,应用程序被强制关闭:

代码语言:javascript
复制
E/AndroidRuntime(280): FATAL EXCEPTION: main
E/AndroidRuntime(280): java.lang.NoClassDefFoundError: sun.reflect.ReflectionFactory
E/AndroidRuntime(280):  at org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.<init>(SunReflectionFactoryInstantiator.java:40)
E/AndroidRuntime(280):  at org.objenesis.strategy.StdInstantiatorStrategy.newInstantiatorOf(StdInstantiatorStrategy.java:85)
E/AndroidRuntime(280):  at org.objenesis.ObjenesisBase.getInstantiatorOf(ObjenesisBase.java:90)
E/AndroidRuntime(280):  at org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:73)
E/AndroidRuntime(280):  at com.rits.cloning.Cloner.newInstance(Cloner.java:291)
E/AndroidRuntime(280):  at com.rits.cloning.Cloner.cloneInternal(Cloner.java:468)
E/AndroidRuntime(280):  at com.rits.cloning.Cloner.deepClone(Cloner.java:327)
E/AndroidRuntime(280):  at com.*.project_monitoring.project.WBS.add(WBS.java:35)
E/AndroidRuntime(280):  at com.*.project_monitoring.project.ProjectUtility.demoPlan(ProjectUtility.java:101)
E/AndroidRuntime(280):  at com.*.project_monitoring.ProjectSelection.onCreate(ProjectSelection.java:45)
E/AndroidRuntime(280):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime(280):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
E/AndroidRuntime(280):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
E/AndroidRuntime(280):  at android.app.ActivityThread.access$2300(ActivityThread.java:125)
E/AndroidRuntime(280):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
E/AndroidRuntime(280):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(280):  at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime(280):  at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime(280):  at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(280):  at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime(280):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime(280):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime(280):  at dalvik.system.NativeStart.main(Native Method)

我在googled上搜索并尝试过这样的方法:

  • 清理项目
  • 从构建路径和readd中删除com.rits.cloningorg.objenesis.*
  • 重新排序这些库,以便它们位于Android依赖项的右边
  • 重新排序这些库,使它们在所有库的基础上。

我不认为这是因为eclipse更新,因为我在这之前几周更新了它。

下面是源代码:

代码语言:javascript
复制
package com.*.tree;

import java.util.ArrayList;
import com.rits.cloning.Cloner;

public class MyTree {
    Data o;
    MyTree parent;
    ArrayList<MyTree> child = new ArrayList<MyTree>();

    public void add(MyTree tree) {
        Cloner c = new Cloner();

        MyTree temp =   c.deepClone(tree); //this is where the app crashed
        temp.parent = this;
        child.add(temp);
    }

    public static void main(String[] args) {
        MyTree tree1 = new MyTree();
        MyTree tree2 = new MyTree();

        tree1.add(tree2);
        tree1.add(tree2);
        tree1.add(tree2);
        //The result wanted here is tree1 has 3 different but identical child objects
        //NOT 3 child which refer to the same one object
    }
}

class Data {
    double value;
}

问题:

  • 为什么我会有这个错误,以及如何消除它?
  • 还有其他方法来实现我的树吗?

请原谅我的英语。

谢谢您:)

EN

回答 1

Stack Overflow用户

发布于 2012-09-08 22:01:12

在Eclipse中,当您在对话框中添加外部库时,不要忘记切换到选项卡,并在列表中勾选该库的名称。这是必需的,以便在运行时找到库,而不仅仅是在编译时。

NoClassDefFoundError when running Instrumentation test with ant

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12333342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档