JAVA网站制作之使用Java 编写手机使用程序(续)
不得不提一下的是:.net是看到java红,而开发出来的工具。程序对MIDlet举行调试编写PalmOS上的Spotlet时,我们能够使用System.out.println()函式帮我们印出一些讯息以匡助调试,那幺在手机上的MIDlet呢?准绳上,我们仍是能够使用System.out.println()函式做一些输入。当摹拟器实行时,就会在命令列上输入一些讯息。
别的,在PalmOS上,有KVMutil.prc能够匡助我们记录程序所输入的讯息。那手机上呢?由于没有实践的呆板能够测试,因而这个成绩到如今还不得而知,信任Motorola到时分会有完美的办理计划吧!
在MotorolaJ2MESDK内附的申明文件当中,大要地提到了调试的成绩,外头提到,今后假如我们要举行机上调试(on-devicedebugging)的话,必需要满意几个前提:
呆板自己要具有调试相干功效,并与KDWP(KvmDebugWireProtocol)兼容。由于调试时,调试工具必要使用KDWP和呆板上扳谈以获得调试信息。
打造厂商自己要供应下载MIDlet得手机上以举行调试的办法。
供应对MIDlet调试的工具,必需撑持手机在使用KDWP调试时所利用的传输接口(比方串行口或UDP)。
嗯,看起来可以举行调试,MIDlet程序的编写应当是很便利的事变了。
MotorolaJ2MESDK对中文的撑持
信任看过RUN!PC11月号的文章「使用Java编写PalmOS使用程序基本篇」的读者,在编写PalmOS上的Spotlet时必定会碰到中文没法一般显现的成绩。中文的成绩分红两个部分,一个是在用户接口上的中文成绩,一个是在命令列输入(使用System.out.println()函式所做的输入)上的中文成绩,请人人做个小实行,将后面我们所编写的程序改以下:
HelloMIDlet.java
importjavax.microedition.lcdui.*;
importjavax.microedition.midlet.*;
publicclassHelloMIDletextendsMIDlet
{
privateDisplayfirstDisplay;
privateFormfirstForm;
HelloMIDlet()
{
firstDisplay=Display.getDisplay(this);
firstForm=newForm("哈罗!MIDlet");
StringItemfirstStrItem=newStringItem("哈罗","米德列特");
firstForm.append(firstStrItem);
System.out.println("MIDlet启动");
}
protectedvoidstartApp()throwsMIDletStateChangeException
{
firstDisplay.setCurrent(firstForm);
}
protectedvoidpauseApp()
{
}
protectedvoiddestroyApp(booleanunconditional)
throwsMIDletStateChangeException
{
}
}
将本MIDlet编译并经由预身考核以后,我们开启摹拟器来实行此MIDlet,底下为实行了局:
用户接口输入:命令列输入
我们从了局发明,预设的编译指令会让用户接口一般输入中文,而命令列没法输入准确的中文。
我们从了局发明,预设的编译指令会让用户接口一般输入中文,而命令列没法输入准确的中文。
接着请将compileAll.bat当中底本的指令
javac-O-bootclasspath....lib%COMPILECLASS%
修正为
javacCencodingISO8859_1-O-bootclasspath....lib%COMPILECLASS%
以后,从头编译此MIDlet实行了局:
用户接口输入:命令列输入
我们从了局发明,预设的编译指令会让用户接口没法一般输入中文,而命令列却能够输入准确的中文。
这个了局与PalmOS上所做的中文测试了局有所分歧。
当您编写Spotlet时,假如您利用javac。。。指令时,您会发明摹拟器上的用户接口输入是乱码,但是命令列上的输入却能够一般输入中文。可是假如您利用的是javac-encodingISO8859_1。。。指令,则CLDC内附摹拟器上的用户接口输入或是命令列上的输入全体都酿成乱码,没法一般输入中文(这个部分是由于CLDC内附摹拟器实做的成绩,形成与实践呆板的了局有差别)。
总之,假如之前您所编写的Spotlet没法在装有中文体系的实践呆板或POSE上一般输入中文,请您也依样画葫芦,在编译指令中到场-encodingISO8859_1,就能够在实践呆板或POSE上看到一般的中笔墨了。
会发生此成绩的主因,次要是由于编译好的Java类文件(bytecode)当中,一切的笔墨编码都接纳UTF8。举例来讲,当您在程序码里用到"启动"这两其中笔墨时,
"起"这个字的Big5编码为B1D2。
"动"这个字的Big5编码为B0CA。
我们会利用javacxxxx.java来编译原始码以发生类文件。实在这行指令,在繁体中文的Windows情况底下,相称于javac-encoding"Big5"xxxx.java。也就是说,当编译器读取到Big5编码局限的中笔墨时,会主动将此Big5码经由「Big5èUnicode对比表」将Big5转为Unicode,也就是说,经由查表以后,
“起”这个字的Unicode编码为555F。
“动”这个字的Unicode编码为5272。
然后再使用UTF8编码将此Unicode转为UTF8,贮存在类文件当中,因而,假如您用UltraEdit之类的笔墨编纂器检察类文件时,您会看到,
"起"这个字的UTF8编码为E5959F。
"动"这个字的UTF8编码为E58B95。
接着,当我们在程序实行时假如要将中文输入,则JVM会卖力读进UTF8码,然后将其转回Unicode,最初根据您所利用的体系情况预设的编码转回Big5,再输入至屏幕上。
但是经由测试了局,KVM仿佛只要做到把UTF8读出去,转换回Unicode以后就间接输入了。少了转回Big5的步骤,因而,操纵体系把Unicode看成Big5来处置,天然就找不到该码所对应的中笔墨了,也因而输入的是一堆?????的标记。这也是我们在PalmOS上即便装了中文体系,也没法一般显现中文的原因。
OK,既然晓得KVM只帮我们做了一半的事情,那事变就好办了,我们只需让UTF8转回以后,仍旧保有Big5的编码体例便可,因而我们利用指令javac-encodingISO8859_1xxxx.java,请编译器不要将程序码中中文Big5编码的两个byte视为一体(由于视为一体就会激发查询Big5èUnicode对比表的事情),只需将中文看成是一般的西欧字母字集便可,因而,当我们利用了上述指令,您会发明类文件当中的中文酿成,
"起"这个字的UTF8编码为C2B1C392。
"动"这个字的UTF8编码为C2B0C38A。
人人能够发明编译器把B1、D2、B0、CA一般看成一个码来处置。因而,当KVM读到此编码时,就会将他们转回B1D2和B0CA,然后KVM间接输入,就能够一般地利用中文了。
最初总结全部成绩,就笔者的揣度,CLDC内附的摹拟器再没有利用javacCencodingISO8859_1xxxx.java指令之前,会在用户接口任务令列输入乱码,这才是一般的了局,而MotorolaJ2MESDK内附摹拟器的用户接口中文之以是没成绩,极可能只是由于摹拟器操纵的差别。因而依据KVM的输入了局来看,极可能在实践的手机上,我们都必需加上-encodingISO8859_1选项才干准确输入中文吧!
在此出格感激静宜年夜学资管系的唐恺隆(kailung.tang@msa.hinet.net)同砚。由于笔者于他经由强烈热闹的会商以后,我们才干对J2ME的中文成绩有更深切的熟悉
撑持MotorolaJ2MESDK的开辟工具
在编写本文的时分,撑持MIDlet开辟的集成开辟情况(IDE)只要MotorolaJ2MESDK附带文件当中所提到的CodeWarrior罢了。信任别的厂商,如Borland,应当也会很快天时用其产物JBuilder的OpenToolsAPI来撑持MIDlet的开辟才对,更况且BorlandJBuilder今朝已有Spotlet的办理计划了。
由于笔者没法拿到CodeWarrior作测试,以是没法在此供应人人相干信息,信任假如无机会的话,会别的以专文向人人先容怎样使用CodeWarrior编写MIDlet。
MotorolaJ2MESDK附带文件在附录的部分有对使用CodeWarrior开辟MIDlet做复杂的先容,信任对初学者来讲,已相称充足了。
MotorolaJ2MESDK内含的帮助开辟工具
在MotorolaJ2MESDK当中内含三项帮助开辟工具,能够便当我们的程序开辟事情,它们分离是:
J2ME摹拟器(J2MEEmulator)
让您能够在您的PC上摹拟Motorola未来会撑持J2ME的手机安装。云云一来就能够在PC上间接测试写好的程序。
Bytecode考证器(BytecodeVerifier)
此考证器用来考证类文件(classfile)当中的bytecode不会对存储器做不法的存取。并确认载进假造呆板的类文件所做的一切举措皆切合Java假造呆板规格(JavaVirtualMachineSpecification)。
设置编纂器(ConfigurationEditor)
让您可以创建或修正deviceprofile。
在MotorolaJ2MESDK内附的文件当中对这三个工具有具体的申明,笔者在此就不再赘述了。
总结
呼!好累人,终究到了该做总结的时分了!人人觉得MIDlet就如许停止了吗?不!MIDlet另有很多好玩的玩艺儿呢!我们将在本系列以后的文章中为人人更深切切磋MIDlet。我们下次见。
附录:典范程序
MotorolaJ2MESDK当中内附很多风趣的典范,它们位于demo/midlets/目次底下。有乐趣持续精进的读者能够由这些典范学到更多有关MIDlet的深切技能,因为这些典范的实行画面过年夜,以是在本文当中就将他们省略,请读者们自行参考申明文件。
这些典范程序有:
Bounce
com.mot.j2me.midlets.bounce.Bounce
PaddleBall
com.mot.j2me.midlets.paddleball.PaddleBall
Scribble
com.mot.j2me.midlets.scribble.Scribble
FontDemo
com.mot.j2me.midlets.tutorials.FontDemo
GraphicsDemo
com.mot.j2me.midlets.tutorials.GraphicsDemo
RecordStoreDemo
com.mot.j2me.midlets.tutorials.RecordStoreDemo
UDPTutorialApplication
com.mot.j2me.midlets.tutorials.UDPReceive
AlertTest
com.mot.j2me.midlets.tests.AlertTest
ChoiceGroupTest
com.mot.j2me.midlets.tests.ChoiceGroupTest
DateFieldTest
com.mot.j2me.midlets.tests.DateFieldTest
FormTest
com.mot.j2me.midlets.tests.FormTest
GaugeTest
com.mot.j2me.midlets.tests.GaugeTest
KeyEventsTest
com.mot.j2me.midlets.tests.KeyEventsTest
TextBoxTest
com.mot.j2me.midlets.tests.TextBoxTest
TextFieldTest
com.mot.j2me.midlets.tests.TextFieldTest
TickerTest
com.mot.j2me.midlets.tests.TickerTest
收集资本
◎网站
称号URL
Motorola官方网站http://www.motorola.com/java/
Metrowerks(CodeWarrior)http://www.Metrowerks.com
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点 不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 是一种语言,用以产生「小应用程序(Applet(s)) 是一种使用者不需花费很多时间学习的语言 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
页:
[1]