J2ME找不到java.util.TreeMap的实现 我在尝试什么

J2ME找不到java.util.TreeMap的实现 我在尝试什么,java,java-me,midp,treemap,cldc,Java,Java Me,Midp,Treemap,Cldc,我试图在J2ME应用程序中使用java.util.TreeMap。我知道TreeMap存在于J2SE上,但不存在于J2ME上,所以我已经做了一些努力,将J2SE 6.0TreeMap移植到J2ME 1.2,并将其包含在我的Midlet Jar中。这涉及到移植collections框架的一半,但现在(理论上)我已经完成了,并想对其进行测试 错误 但当我在SUN J2ME SDK 3.0模拟器(DefauldClPhone2)上启动我的应用程序时,我会遇到以下异常: java.lang.NoCl

我试图在J2ME应用程序中使用
java.util.TreeMap
。我知道
TreeMap
存在于J2SE上,但不存在于J2ME上,所以我已经做了一些努力,将J2SE 6.0
TreeMap
移植到J2ME 1.2,并将其包含在我的Midlet Jar中。这涉及到移植collections框架的一半,但现在(理论上)我已经完成了,并想对其进行测试

错误 但当我在SUN J2ME SDK 3.0模拟器(DefauldClPhone2)上启动我的应用程序时,我会遇到以下异常:

  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
我还确保
TreeMap.class
是Java1.2类文件格式

我的目标是CDLC1.0和MIDP1.0,因此我的前置验证程序使用类路径
${wtk.home}/lib/cldc_1.0.jar,${wtk.home}/lib/MIDP_1.0.jar

只是想一想:J2ME类加载器中是否有任何特殊的检查阻止它从应用程序jar加载
java.util.*
java.lang.*
类?我从没听说过,但也许他们做了这样的事情作为一个安全功能

结论与对策 正如Joachim Sauer指出的,如果我定义了类,类加载器将不会加载
java.*
中的类。所以我不得不将它们转移到另一个包中,实际上是
com.companyname.j2meport.java.util
。虽然我自己的代码可以从那里导入这些类,但对于引用java.util.TreeMap的封闭源代码第三方libs来说,这不是一个选项

我最终设法用这个工具更改了对我自己类的引用,我已经在构建过程中使用了这个工具,但我并不完全了解它的功能


我的J2SE库依赖于其他J2SE库,现在运行在J2ME上

只有引导引导引导加载程序才能从以
java开头的包中加载类。

这意味着您必须将类移动到另一个包中


有关详细信息,请参阅的JavaDoc。

您在这两种情况下都是正确的——CLDC1.0不包括NoClassDefFoundError(请参阅),并且您不能创建自己的java.*类;请参阅上述答案中的链接。

是的,我还了解到CLDC 1.0没有NoClassDefFoundError。这实际上被认为是一个bug,并在CLDC 1.1中得到了修复,不管怎样,这似乎没有什么真正的问题,CLDC 1.1上的错误看起来与CLDC 1.0上的错误完全相同。也许我的1.0模拟器有这个类,但它不应该有这个类。这清楚地表明,它不可能像我打算的那样。我猜在J2SE机器上,我实际上会得到一个SecurityException,这会使NoClassDefFoundError更加明显。你说得对,我得把我的课搬到别的地方去。对我来说是个坏消息(因为这会带来很多新问题),但还是非常感谢。顺便说一句,javax也是如此。*@Brian:我想我也会记得javax。*同样的事情,但是没有提到,因为我链接的文档没有提到它。我想知道这个事实是否应该被视为一个文档错误。
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)