2

我正在使用 CLDC 1.1 + MIDP 2.0 。“编译器合规级别”设置为 1.4 。

当我将“编译器合规级别”设置为 1.6 时,出现以下错误:“ALERT: java/lang/ClassFormatError: Bad version information.”。

如何在 J2ME 中使用 java 1.6?

4

3 回答 3

4

这个答案现在可能已经过时了,请参阅下面的最新答案。


日期:2011 年 4 月

如何在 J2ME 中使用 java 1.6?

不能

核心原因:J2ME 适用于内存和 cpu 是最大限制的移动设备。

于 2011-04-21T12:00:44.067 回答
1

Java ME 是 Java 的一个子集,大多数 ME 特定代码将主要驻留在客户端上,因此您不需要任何特殊版本的 Java 来编译程序。

这里的问题是您使用的 Java 编译器版本在手机发明时并不存在。Java 编译器的版本被写入 .class 编译输出。

理想情况下,您会使用旧版本的 Java 编译项目,但安装旧版本非常困难。因此我们可以自己充当编译器,手动将 .class 输出文件中的版本设置为我们想要的版本,并且我们应该确保我们不使用该版本之后的功能。在这种情况下,我们将针对版本 1.2。

您可以使用编译器的 -source 和 -target 选项来禁止尽可能多的功能,但是许多 javac 编译器对它们可以定位的旧版本有限制,我的 Java 9 (1.9) 可以低至 1.6。您需要手动确保您没有使用 1.2 和 1.6 之间引入的功能

.class 文件中的前 4 个字节是臭名昭著的“CAFEBABE”魔术字符串。字节 5 和 6 通常是 0 字节 7 和 8 是 java 的次要和主要版本。

将字节 8 更改为 0x2E。根据https://en.wikipedia.org/wiki/Java_class_file这对应于版本 1.2 或 Java2。

我们使用 Java2 是因为,正如您在其首字母 J2ME 中看到的那样,Micro Edition 是在 Java 2 中发布的。因此,出于向后兼容性的原因,您可以相当确信手机将运行此类应用程序。如果您需要在此 Java 版本之后引入的功能,只需不断增加版本号,直到再次无法找到您的手机支持的确切 Java 版本。

于 2022-02-15T18:41:19.970 回答
0

您不能使用它,因为它是用于与移动设备不兼容的 se 和 ee 版本

j2me 3.0的最新 sdk可用

于 2011-04-21T12:05:41.247 回答