J2ME找不到我的执行情况。工具.树形图
题
我
我试图使用 java.util.TreeMap
在J2ME应用程序。我知道, TreeMap
是本上J2SE但不是在J2ME,所以我做了一些努力来港口J2SE6.0 TreeMap
到J2ME1.2和包括它在我的习本教罐子。这涉及移植一半的集合框架,但现在我很(理论上)完成,并希望它进行测试。
错误
但是,当我开始我的应用程序上的太阳J2ME SDK3.0模拟器(DefauldClclPhone2)我得到这个例外:
java.lang.NoClassDefFoundError: java/util/TreeMap
java.lang.Class.invoke_verify(), bci=0
java.lang.Class.initialize(), bci=117
com.companyname.test.TestMidlet.<init>(), bci=19
java.lang.Class.newInstance(), bci=0
com.sun.midp.main.CldcMIDletLoader.newInstance(), bci=46
com.sun.midp.midlet.MIDletStateHandler.createMIDlet(), bci=66
com.sun.midp.midlet.MIDletStateHandler.createAndRegisterMIDlet(), bci=17
com.sun.midp.midlet.MIDletStateHandler.startSuite(), bci=27
com.sun.midp.main.AbstractMIDletSuiteLoader.startSuite(), bci=52
com.sun.midp.main.CldcMIDletSuiteLoader.startSuite(), bci=8
com.sun.midp.main.AbstractMIDletSuiteLoader.runMIDletSuite(), bci=161
com.sun.midp.main.AppIsolateMIDletSuiteLoader.main(), bci=26
一个真正的设备我 "Error in Application"
但不能看到实际的例外情况,因为我没有匹配的SDK现在。
有什么奇怪的关于该错误的
我感到困惑的事实我的应用程序的成功经历的preverification过程。我总是有经验的这一缺失类(和我有他们中许多人几天前)发出错误的preverifier.所以我的结论是,后成功preverification就不可能有任何 NoClassDefFoundError
上述设备。
详细信息
该目录的结构内,我的罐子看起来是这样的:
test.jar
com
companyname
(my application classes, including the Midlet class)
java
lang
Comarable.class
Iterable.class
(some others which are missing on J2ME)
util
TreeMap.class
TreeSet.class
(many others which are missing on J2ME)
我还确信, TreeMap.class
在Java1.2类文件的格式。
我瞄准CDLC1.0和实1.0,所以我preverifier是使用类路径 ${wtk.home}/lib/cldc_1.0.jar, ${wtk.home}/lib/midp_1.0.jar
只是一个想法:是否有任何特殊检查的J2ME类装入器,防止它加载 java.util.*
或 java.lang.*
类从一个用罐子?我从没听说过,但他们或许没有像这样的东西作为一种安全功能?
结论和解决方案
作为约阿希姆*绍尔指出,类装入器将不负荷类 java.*
如果我定义。所以我不得不将它们移动到另一个软件包,实际上到 com.companyname.j2meport.java.util
.而我自己的代码然后可以进口这些类从那里,这不是一个选项对于封闭源代码的第三方库,其中提到java。工具.树形图.
我终于设法改变这些引用我自己的课程使用 扩展机制的Retrotranslator, 一个工具,我已经利用我的建立过程,但其能力我不是充分认识。
我J2SE库,其依赖于其他J2SE图书馆,现已运行在J2ME!
解决方案
其他提示
您是对在这两种情况下 - CLDC1.0不包括的NoClassDefFoundError(见的 CLDC1.0规范),没有你可能无法创建自己的Java *类。看到在上面的回答的链接。