网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.[原创] Java数据库字符国际化.
.JVM的垃圾回收机制详解和调优.
.用例子来说明面向对象和面向过程.
.使用Java 1.2的Authenticator 类.
.使用GameCanvas制作星空效果.
.J2EE指南.
.BEATuxedo开发心得.
.Hibernate入门 - Transaction.
.在组合模式中实现访问者(Visitor.
.“面向切面(AOP)”与“面向对象(.
.Weblogic中使用持久缓存技术优化.
.将Java程序作成exe文件的几种方法.
.SUN力推Java数据对象标准展示倡导.
.程序员应用EJB 3.0必要的准.
.实现游戏中的图片滚屏功能.
.Crystal Report RAS9 Java Web开.
.Copy 方法.
.Java进阶:编写跨平台Java程序注.
.用Java动态代理实现AOP.
.错误的堆大小产生的.

让JavaME程序真正Run Anywhere

发表日期:2008-1-5


欢迎指教,tengshiquan@yahoo.com.cn

  "Write once,run anywhere" 是Java的口号,但在J2ME平台上做的应用,要想不改动代码就run anywhere,难度是很大的。假如要把一个应用程序做到让大多数的机型都适用,就要考虑到方方面面,其难度是相当大的。

  比如给百宝箱做游戏,上线机型大多是MIDP1。0的机器,感觉移植中最麻烦的还要数声音部分的API,必须根据各个机型来改动。虽然图象还比较轻易做成自适应的,但声音部分就一般就只能根据各个机型来改动。

  下面提供一种解决方案,可以让J2ME程序在运行时自动加载该机型支持的声音资源并用该
机型的声音API来播放。

  要害问题: 1。各机型提供的播放音乐的API都有所不同,非凡是较老的机型。
  需要在运行时根据机型自动加载。
  2。各机型支持的声音的资源文件也不同。需要在运行时根据机型自动加载。
  3。各机型的JVM不同,多多少少有一些比较非凡的BUG。

解决方案
  1. 原则:能用标准API就用标准API,不能用的话,就用各个机型自身的API。

// Player types
static final int STANDARD = 0; //For MIDI
static final int NOKIA = 1; //For ott
static final int SAMSUNG = 2; //For mmf
static final int NEC = 3; //For MIDI


static final String[] supportedPlayerTypes = {
"javax.microedition.media.Player", //STANDARD API
"com.nokia.mid.sound.Sound", // Nokia
"com.samsung.util.AudioClip", //samsung
"com.nec.media.AudioClip", //nec
};


进入讨论组讨论。

  下面利用反射机制来动态加载:

public void determinePlayerType() {
// use most -> less use
isSupportSound = true;

for (int i = 0; i < supportedPlayerTypes.length; i++) {
// try to load a proper sound Player
try {

Class.forName(supportedPlayerTypes[i]); //加载当前的Player类型

playerType = i; //保存加载成功的类的类型
return;
} catch (Exception e) { //加载不成功,说明不支持,继续加载下一种
e.printStackTrace();
}
}
isSupportSound = false;
}



  2. 下面就可以根据在载成功的类型来加载可以播放的声音资源了

public void createPlayer(String name) {
if (!isSupportSound)
return;

switch (playerType) {
case STANDARD: // for MIDI
case NEC:
createPlayerFactory("/" + name + ".mid");
break;
case NOKIA: //for ott
createPlayerFactory("/" + name + ".ott");
break;
case SAMSUNG: // for mmf
createPlayerFactory("/" + name + ".mmf");

上一篇:打破Java定律:无需创建对象--Ioc容器革命 人气:593
下一篇:Java/J2EE中文问题终极解决之道 人气:545
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐