|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
最后我再次声明,我并没有说不看好java,实际上我对java很乐观的,毕竟她正在不断改进中,我相信她总有一天会和.net并驾齐驱的程序对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,底下为实行了局:
用户接口输入:命令列输入http://www.csdn.net/expert/wangsen/artic013.jpghttp://www.csdn.net/expert/wangsen/artic014.jpg我们从了局发明,预设的编译指令会让用户接口一般输入中文,而命令列没法输入准确的中文。
我们从了局发明,预设的编译指令会让用户接口一般输入中文,而命令列没法输入准确的中文。
接着请将compileAll.bat当中底本的指令
javac-O-bootclasspath....lib%COMPILECLASS%
修正为
javacCencodingISO8859_1-O-bootclasspath....lib%COMPILECLASS%
以后,从头编译此MIDlet实行了局:用户接口输入:命令列输入http://www.csdn.net/expert/wangsen/artic015.jpghttp://www.csdn.net/expert/wangsen/artic016.jpg我们从了局发明,预设的编译指令会让用户接口没法一般输入中文,而命令列却能够输入准确的中文。
这个了局与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
你通过从书的数量和开发周期及运行速度来证明:net和ruby要比java简单。 |
|