我试图使用 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!

有帮助吗?

解决方案

仅举程序可以负载类软件包,开始 java..

这意味着你将要移动你的流入另一个包裹。

看如果是的话,为什么不试的 类装入器。defineClass() 对于细节。

其他提示

您是对在这两种情况下 - CLDC1.0不包括的NoClassDefFoundError(见的 CLDC1.0规范),没有你可能无法创建自己的Java *类。看到在上面的回答的链接。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top