我正在开发一个 Android 应用程序,它使用com.rits.cloning
and org.objenesis.*
深度克隆对象的库。
目的是将相同的对象添加到我的树结构类中两次或多次,而不必担心原始对象引用相同的对象。
自从定期clone()
只是浅复制对象,我使用提到的库。
在开发 android 项目之前,我创建了一个 java 项目来实现我的树,并且使用这些库运行良好。
然后我将它导入到android项目中(并且还添加com.rits.cloning
, org.objenesis.*
作为外部库,然后检查中的两个库Java Build Path > Order and Export
)。
但是当我运行它时,就在我调用的那一行deepClone()
,此错误出现在 LogCat 中并且应用程序被强制关闭:
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)
我用谷歌搜索并分别尝试过:
- 清理项目
- remove
com.rits.cloning
and org.objenesis.*
从构建路径和 readd
- 重新排序这些库,使它们位于 Android 依赖项的正下方
- 重新排序这些库,使它们位于所有库之上
我不认为这是因为 eclipse 更新,因为我在发生这种情况之前几周就更新了它。
这是源代码:
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;
}
问题:
- 为什么会出现该错误以及如何消除它?
- 还有其他方法来实现我的树吗?
请原谅我的英语。
谢谢 :)
在 Eclipse 中,当您在 Java Build Path 对话框中添加外部库时,不要忘记切换到 Order and Export 选项卡并在列表中勾选该库的名称。这是必要的,以便在运行时找到该库,而不仅仅是在编译时。
使用 ant 运行 Instrumentation 测试时出现 NoClassDefFoundError https://stackoverflow.com/questions/9847443/noclassdeffounderror-when-running-instrumentation-test-with-ant/9958669#9958669
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)