首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >J2ME -在一个项目中支持不同的平台

J2ME -在一个项目中支持不同的平台
EN

Stack Overflow用户
提问于 2014-08-20 09:05:39
回答 2查看 81关注 0票数 1

我正在用J2ME开发一个应用程序,它将部署在不同的平台上(所有这些平台都支持J2ME)

对于UI,我将使用LWUIT,并确保它在每个平台上呈现的大致相同。(LWUIT跨平台)

正如我所知,每个平台都有自己的细微之处,例如库的可用性/缺位,我想知道最好的行动方针是

( A)为每个平台创建一个新项目(例如,为黑莓( Blackberry )创建一个项目,为诺基亚( Nokia)创建一个),并在它们之间复制和粘贴类似的、可重用的代码;基本上一次维护4-5个类似的代码库。

( B)有一个大项目充斥着"if“或"switches”,上面写着(如果平台== x那么做xx)。

有人能告诉我,上面的话是否有一些严重的愚蠢的疏忽,我没有捡到吗?我倾向于实现A,但是我认为两者都存在一些可维护性问题。

非常感谢

费尼克斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-21 05:46:53

维护多个代码库是大多数开发人员喜欢避免的。

Afaik大多数开发人员使用预处理器,这基本上允许您在代码中使用大量if语句,而不会使jar文件更大。

我在所有的JavaME游戏项目中都使用了预处理,以便能够用一个代码库编译成多个目标。

代码语言:javascript
运行
复制
//#if ScreenWidth==240
tilesize = 16;
spriteSheet = Image.createImage("sprites16x16");
//#endif
//#if ScreenWidth==640
tilesize = 32;
spriteSheet = Image.createImage("sprites32x32");
//#endif

您可能没有听说过预处理,因为它通常不用于Java。但是,由于设备的碎片化,将其用于JavaME是有意义的。我也希望能够对Android项目进行预处理,但遗憾的是,这还不可能。

其他一些次要的事情,比如Nokia的存在,不需要预处理。只需使用classForname检查类是否存在,如果存在则将布尔值设置为true。然后在代码中使用这个布尔值来检查是否应该执行某一段代码。(例如,我使用Nokia来保持屏幕的活力,因为这个API存在于诺基亚和索尼爱立信设备上)。

代码语言:javascript
运行
复制
try {
  Class.forName("com.nokia.mid.ui.DeviceControl");
  nokiaui = true;
} catch (Exception e) {}

然后在我的游戏循环中:

代码语言:javascript
运行
复制
if (nokiaui) {
  com.nokia.mid.ui.DeviceControl.setLights(0, 100);
}

也可以将类似的东西放在预处理块中,但这样就会错过可能支持它的设备。

票数 1
EN

Stack Overflow用户

发布于 2014-08-21 07:21:15

这始终是taft支持的几个平台。

您可以从LWUIT获得灵感,因为您已经提到它(https://java.net/projects/lwuit/sources/svn/show/trunk?rev=1653)。这是一个庞大的代码库,它需要时间来遵循它。其主要思想是模块化项目,并通过接口和实现隐藏平台特定的细节。并在运行时或编译时通过依赖注入配置它。

例如,您有将通过http与服务器通信的Client类。因此,您可能会有下一个结构:

代码语言:javascript
运行
复制
common
  Client
  Network

j2me
  J2MENetwork extends Network
  J2MEMidlet
blackberry
  BlackBerryNetwork extends Network
  BlackBerryApp

因此,Network将是抽象类,并将具有一些关于使用重试构造urls的公共逻辑。BlackBerryNetwork将使用特定于平台的API进行网络通信。Client将在J2MEMidletBlackBerryApp中注入正确的实现。

建议: 1)不要复制代码。维护一个代码库2)我真的反对预处理。因此,如果根本无法避免,请将所有预处理集中在一个-两个工厂类中。

祝你好运和我最美好的祝愿!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25400773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档