J2ME - 代码一次,到处运行?

时间:2009-05-15 19:20:43

标签: java java-me

我可以在J2ME中编写一次代码并在任何手机上运行,​​就像我可以使用.Net compact框架一样吗?

6 个答案:

答案 0 :(得分:5)

您将遇到每个提供程序如何实现其JVM的差异。由于每部手机的硬件都不同,因此它们的工作方式略有不同。大多数东西都会起作用,但可能会有一些差异。

答案 1 :(得分:5)

受到碎片影响的几个领域:

  • 如果您只使用基本的GUI控件,那么从一部手机到另一部手机,您的应用程序可能会略有不同。如果不这样做,则必须编写处理不同屏幕尺寸和输入方法的代码(键盘与触摸屏)。

  • 制造商倾向于以不同方式解释多媒体和网络规范,或者只是发送包含错误的手机。某些移动网络运营商只允许HTTP网络流量。

  • 管理文件系统访问的安全策略因手机而异。某些手机​​的RMS记录大小有限。

  • 从一部手机到另一部手机,性能各不相同。

...

答案 2 :(得分:3)

您编写的J2ME代码在运行时和可访问的类方面需要手机上的特定环境。根据您在应用程序中使用的内容,您可以在某些手机上运行它,而不会在其他手机上运行。对于例如让我们说一个使用MIDP 2.0和CDLC 1.1的J2ME应用程序。现在,您的应用只适用于支持这些配置文件的手机。

在编写手机应用程序时,您通常会定位某部分手机。您不希望加速度计应用程序在没有加速度计的手机上运行! (我不认为J2ME对加速度计有任何支持;))

答案 3 :(得分:2)

是的,你可以在任何支持java的手机上运行midlet。

但是当谈到j2me编码时,“写一次,随处运行”的口号就变成了

“写一次,到处重写”

“写一次,到处调试”

答案 4 :(得分:2)

首先,我想说这里的大部分评论都是正确的,不同的JVM确实可能略有不同,你应该记住你正在使用的API。

但是,还有一个需要考虑的因素是:标准化。我的意思是移动服务架构(MSA - JSR 248),它们通过创建一些标准的API来大大简化。此外,它们对包含的API以及如何实施它们的规则进行了一些澄清。

MIDP 2.1这样的东西也是紧缩的标准。 2.1 verison基本上是2.0,但是“螺栓收紧”:更严格的规则,使某些方面明确,并消除潜在的碎片。例如,在任何情况下都需要包含双缓冲,或者如果设备有触摸屏,则需要支持Java中的触摸屏。

话虽如此,我应该得出结论,碎片确实在减少,制造商确实采用了像JSR 248这样的标准。但是无论如何都要根据需要测试你的应用程序,我们所有人和JVM开发人员也会犯错误并在他们的错误中留下bug。代码。

答案 5 :(得分:1)

无论是J2ME还是.NET Compact Framework都无处不在,(虽然大量手机支持J2ME)但您只能在支持它们的手机上运行。因此,在任何一种情况下,您都可以编写一次并在支持平台/框架的任何地方运行。