JAVA网站制作之J2ME程序开辟全方位基本解说汇总
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.程序1、J2ME中必要的Java基本常识 如今有年夜部分人,都是从零入手下手学J2ME的,进修J2ME的时分,老是从Java基本入手下手进修,并且如今讲Java基本的书本中都是以J2SE来说基本,这就给进修形成了一些不用要的贫苦,上面将J2ME顶用到的和不必要的Java基本常识做一个复杂的申明。J2ME中利用到的Java基本常识:
1、Java语法基本:包含基础数据范例、关头字、运算符等等
2、面向对象的头脑:类和对象的观点,承继和多态等等。
3、非常处置
4、多线程
J2ME中没有效到的Java基本常识:
1、JDK中javac和java命令的利用
2、Java基本中的良多类在J2ME中没有,大概类中的办法做了大批的精简。以是倡议在J2ME中熟习类库。
3、Applet、AWT、Swing这些常识在J2ME中基本利用不到。
复杂说这么多,但愿学J2ME的伴侣们能少走一些弯路,不敷的地方但愿人人主动斧正和增补。
2、J2ME中临时没法完成的功效
列一些J2ME中临时没法完成的功效,但愿人人能主动增补:
1、在手机中不变动代码完成移植,次要指游戏。
2、静态修正按钮笔墨。
3、在Canvas上承受中文输出。
4、操纵当地资本、比方地点本、已收短信息等。
5、制造损坏性的手机病毒。
6、其他守候人人来增补。
3、J2ME的跨平台性
J2ME手艺源于Java,以是也具有JVM的上风,能够在撑持Java的平台长进行移植,可是如今的J2ME手艺在跨平台上却做的很糟,我们来复杂看一下缘故原由:
1、手机的屏幕尺寸纷歧:
这个次要在界面制造上。假如你利用的是初级用户界面,好比你做的是使用开辟大概用户上岸、用户注册如许的通勤奋能时,一样平常没有甚么成绩。
假如你利用的是初级用户界面,好比你做的是游戏,那末你就必要思索这个成绩了。
2、厂商的扩大API不一致:
比方Nokia的扩大API类库UI系列,在其余手机上大概没有完成,大概包名分歧等等。
3、手机平台上完成的bug:
比方Nokia的7650在完成双缓冲上有bug,那末在这类机型上运转的软件就不克不及利用双缓冲。其他NOKIA上的一些bug,能够参看:http://blog.csdn.net/Mailbomb/archive/2005/03/24/329123.aspx
4、手机功能成绩。
分歧手机的可用内存、最年夜jar文件都有请求,比方NokiaS40的年夜部分别机撑持的最年夜jar文件为64K,最年夜可用内容为210K。
以是如今的手机软件,出格是游戏都供应撑持的机型列表,也才有了手机游戏移植职员的存在。
4、进修J2ME能够处置的事情品种
如今J2ME手艺能够说相称的暴躁,这里先容一些学好了J2ME以后能够处置的事情的品种:
1、J2ME游戏开辟职员
依据游戏筹划大概文档请求,在某种特定的机型(以NokiaS40或S60占多数)开辟游戏程序。
这是如今年夜部分J2ME程序员处置的事情。
必要纯熟把握:初级用户界面、初级用户界面、线程,假如是收集游戏,还必要纯熟收集编程。
2、J2ME使用开辟职员
如今的挪动使用还不是良多,可是仍是呈现了一些,出格是挪动定位和挪动商务相干的内容。
必要纯熟把握:初级用户界面、线程和收集编程。
3、J2ME游戏移植职员
参照源代码,将能够在一个平台上能够运转的游戏移植到其他平台上往。比方将NokiaS40的游戏移植到S60上,大概索爱的T618等等。
次要是把持屏幕坐标,有些大概必要交换一些API。
必要熟习各平台之间的差别和相干的手艺参数,好比屏幕巨细、最年夜jar文件尺寸等等。
5、J2ME程序计划的几个准绳
1、利用面向对象编程。
固然利用面向历程编程能够减小文件的尺寸,可是为了今后保护的便利和利于扩大,仍是要利用面向对象编程。
2、利用MVC形式
将模子、界面和把持分别。如今良多的程序将三者合一,可是假如你做的程序对照年夜的话,仍是倡议你举行分别。
3、主动存储用户设定
利用RMS来存储用户的信息,比方存储用户前次输出的用户名、暗码、用户关于体系的设定等,如许不但能够削减用户的输出,并且对用户友爱。良多程序乃至做了主动上岸等。
4、一些体系设置同意用户封闭。如背景音乐、背景灯显现等。
5、将初级用户界面的绘制举措放在一个自力的线程内里往。
6、在必要大批工夫才干完成的事情时,给用户一个守候界面。
6、从摹拟器到真机测试
关于J2ME开辟者来讲,摹拟器给我们带来了良多便利,好比能够在摹拟器中调试程序和很便利的观察程序的效果,可是摹拟器也给我们带来了一些成绩,好比摹拟器完成的bug等等,以是举行真机测试是必需的。
1、为何要举行真机测试?
由于摹拟器程序大概存在bug,和真机的功能无限,以是必需举行真机测试。
2、怎样将程序传输到呆板中?
将程序传输到呆板中有以下体例:
a) OTA下载
b) 利用数据线传输
c) 红别传输
d) 蓝牙
你能够依据前提,选择符合的体例。
3、真机测试次要测甚么?
真机测试的内容良多,次要测试以下几个方面:
a) 程序的功效
b) 程序的操纵性,是不是易操纵
c) 程序的巨细,好比NokiaS40系列的手机年夜部分承受的最年夜文件尺寸为64K
d) 程序运转速率,速率是不是能够忍耐。
7、从WTK到厂商SDK
关于J2ME喜好者来讲,基础上人人都是从SUN的WTK(J2MEWirelessToolkit)入手下手的,可是关于实践使用来讲,仅仅利用WTK是远远不敷的,以是在进修过程当中,必需完成从WTK到SDK的超过。
1、厂商SDK的下载地点?
http://blog.csdn.net/Mailbomb/archive/2005/01/01/236606.aspx
2、厂商SDK和WTK有甚么分歧?
厂商SDK最复杂的了解就是在WTK的基本上增添了本人的摹拟器和本人的扩大API。
也就是说,你在利用厂商的SDK时,可使用厂商的扩大类库,比方Nokia的UI类库,和厂商本人的摹拟器罢了。
每一个厂商的扩大API都未几,并且不尽不异。
3、怎样利用?
有些厂商SDK的利用都和WTK不异,比方SamSung。
Nokia供应了自力的界面来开辟,可是这个界面在实践开辟中利用未几。
4、厂商SDK的成绩
厂商SDK完成过程当中,有一些bug,并且和真机完成纷歧致。比方NOKIA的混音播放成绩等等。
8、在J2ME中取得手机IMEI的办法
IMEI是Internationmobileentityidentification的简称,在手机中输出*#06#能够显现该数字,长度为15位,环球独一,永久不会抵触,以是能够作为辨认用户的一个标记。
上面是在J2ME中取得IMEI的办法:
1、MOTO系列的手机能够经由过程读取体系的IMEI属性取得,代码以下:
Stringimei=System.getProperty("IMEI");
2、SIEMENS系列的手机能够经由过程读取体系的com.siemens.IMEI属性取得,代码以下:
Stringimei=System.getProperty("com.siemens.IMEI");
9、J2ME收集毗连中显现成绩的办理举措
在收集编程中,有些时分会呈现一些在没有吸收到收集数据就显现界面的,形成界面显现不切合请求(比方通告显现,会先显现通告的背景图片再显现通告信息),这里提一个复杂的办理举措给人人:
办理这类情形的办法分红三个步骤:
1、在必要显现的界面中,挪用发送收集数据的办法。每次显现时挪用该机关办法,不挪用Display的setCurrent办法显现。
2、显现守候界面(比方进度条等),给用户提醒,在举行收集毗连。
3、在处置收集反应的数据完今后,挪用Display的setCurrent办法显现显现以后界面。
10、加强J2ME的String才能――支解字符串
从JDK1.4今后,String类中新增了split办法来完成字符串的支解,可是在J2ME中却没有该办法(MIDP2.0中也没有完成),可是在实践利用过程当中,有些时分切实其实要用到这类操纵,这里将我之前完成的一段代码和人人共享:
/**
*支解字符串,道理:检拆字符串中的支解字符串,然后取子串
*@paramoriginal必要支解的字符串
*@paranregex支解字符串
*@return支解后天生的字符串数组
*/
privatestaticString[]split(Stringoriginal,Stringregex)
{
//取子串的肇端地位
intstartIndex=0;
//将了局数据先放进Vector中
Vectorv=newVector();
//前往的了局字符串数组
String[]str=null;
//存储取子串时肇端地位
intindex=0;
//取得婚配子串的地位
startIndex=original.indexOf(regex);
//System.out.println("0"+startIndex);
//假如肇端字符串的地位小于字符串的长度,则证实没有取到字符串开端。
//-1代表取到了开端
while(startIndex<original.length()&&startIndex!=-1)
{
Stringtemp=original.substring(index,startIndex);
System.out.println(""+startIndex);
//取子串
v.addElement(temp);
//设置取子串的肇端地位
index=startIndex+regex.length();
//取得婚配子串的地位
startIndex=original.indexOf(regex,startIndex+regex.length());
}
//取停止的子串
v.addElement(original.substring(index+1-regex.length()));
//将Vector对象转换成数组
str=newString;
for(inti=0;i
{
str=(String)v.elementAt(i);
}
//前往天生的数组
returnstr;
}
11、J2ME在初级用户界面上分行显现笔墨
在J2ME的初级用户界面开辟中,常常会碰到必要在Canvas上显现大批的笔墨,比方关于界面、游戏申明、游戏通告等信息。假如在计划时,将笔墨的内容和长度都流动,既倒霉于修正也倒霉于保护。上面先容一个复杂的办法,完成一个复杂、可保护性强的体例。
完成办法:
1、将必要显现的一切信息做成一个字符串。
2、编写一个将该字符串依照请求转换为字符串数组的办法。
3、将转换后的数组以轮回的体例显现在Canvas上。
经由过程如许三个步骤,则修正显现的信息时,只必要修正包括显现信息的字符串便可,本人誊写的办法能够依照之前的尺度从头支解新的字符串。假如必要修正每行显现的字符个数,则只必要修正本人誊写的办法便可。
经由过程如许一种完成体例,能够很便利的完成显现一些对照长的文本信息,即便是可变长度的字符串也没有成绩。
12、J2ME中利用纪录存储体系(RMS)存储信息
在MIDP中,没有文件的观点,以是永世存储一样平常只能依托纪录存储体系完成,关于纪录存储体系的简介,能够参看教程:http://www-900.ibm.com/developerWorks/cn/java/j-wi-rms/index.shtml
上面是一些纪录存储体系的经常使用编码先容:
1、翻开纪录集:
翻开纪录集利用RecordStore内里的静态办法openRecordStore,示例代码以下:
RecordStorers=RecordStore.openRecordStore(“username”,true);
如许就翻开了一个称号为rs的纪录集,个中username为纪录集的称号,该称号能够依据必要来取,第二个参数代表是不是则没偶然创立新的纪录集,true代表在该纪录集不存在时,创立新的纪录集,false代表不创立。
假如在翻开纪录集时,该纪录集不存在,则抛出RecordStoreNotFoundException非常,以是检测纪录集是不是已创立可使用该非常。
注重:纪录集翻开今后记得封闭。
2、向纪录会合写进数据
2.1增添数据
向已翻开的纪录会合增加数据,必要利用addRecord办法,示例代码:
byte[]bytes={1,2,3};
intid=rs.addRecord(bytes,0,bytes.length);
该代码将字节数组bytes的全体内容写进到纪录会合,该办法的前往值为该信息的id,注重:id从1入手下手,而不是从0入手下手。
你能够轮回利用该办法向纪录会合写进多条数据。
2.2修正数据
修正已存在的纪录会合指定id的数据,必要利用setRecord办法,示例代码:
byte[]bytes={1,2,3};
rs.setRecord(1,bytes,0,bytes.length);
以上代码的感化是将字节数组bytes的全体内容写进到id为1的纪录集rs中。
该操纵会掩盖已有的数据。
申明:有些时分,你必要将信息写进到纪录会合的第一笔记录中,则能够分离以上两个办法,则第一次时向纪录集增添数据,今后来举行修正。
3、从纪录会合读出数据
从纪录会合读取已无数据,必要利用getRecord办法,示例代码:
byte[]bytes=rs.getRecord(1);
该代码从纪录集rs中读取第一条数据,将读取到的数据放在bytes数组中。
在读取数据时,能够取得纪录会合id的个数,可使用getNumRecords办法取得
综合代码为:
intnumber=rs.getNumRecords();
intid=1;
if(id>0&&id<number)
{
byte[]bytes=rs.getRecord(1);
}
4、从纪录会合删除纪录
从纪录会合删除纪录的办法有两种:逻辑删除和物理删除。
逻辑删除是指给删除的纪录打标志。
物理删除是指从物理上删除该纪录,可是该纪录的id不克不及被重用,也就是说该id不会被持续利用。比方一个纪录会合有5个纪录,假定你删除id为3的数据,则残剩纪录的id仍然为1、2、4、5。这给便历带来了必定的贫苦。
5、便历纪录集
便历纪录集,即会见纪录会合的一切数据,有两个办法,详见:
http://gceclub.sun.com.cn/NASApp/sme/controller/teclist?tid=0103
6、其他操纵
删除纪录集
删除纪录集分歧于删除纪录,必要利用deleteRecordStore办法,示例代码:
RecordStore.deleteRecordStore(“username”);
该代码删除称号为username的纪录集。
十3、J2ME加密数据的一个第三方开源收费类库先容
在J2ME编程中,常常碰到一些数据在存储大概传输时必要加密,上面先容一个第三方的加密类库的一些材料:
加密类库的官方主页:http://www.bouncycastle.org/
先容的文章:
中文:http://18900.motorola.com/ewa_portal/develope/jc_j2messl_5_1.jsp
英文:http://www.javaworld.com/javaworld/jw-12-2002/jw-1220-wireless.html
该文章的源代码包括利用的一些办法。
备注:由于该类库供应的功效对照壮大,以是类库的尺寸对照年夜,最初在公布时必要将类库中不必要的类删除
十4、怎样播放声响
在J2ME中,处置声响必要利用到MobileMediaAPI(MMAPI),该包是MIDP1.0的可选包,在MIDP2.0中已包括了这个包。以是假如你利用MIDP1.0的话,请确认你的运转情况是不是撑持。
一样平常手机撑持的声响文件格局为wav、mid和mpg等。详细请查阅你的手机申明文档。
在声响处置中,有良多处置的体例,这里说一下最经常使用的情形,播放JAR文件中的wav文件。
播放声响文件的流程:
1、依照必定的格局读取声响文件。
播放JAR文件中的声响文件通常为将声响文件处置成流的情势。示例代码:
InputStreamis=this.getClass().getResourceAsStream("/Autorun.wav");
个中Autorun.wav文件位于JAR文件的根目次下,假如位于其余目次,必要加上目次称号,如/res/Autorun.wav。
2、将读取到的内容传送给播放器。
将流信息传送给播放器,播放器依照必定的格局来举行解码操纵,示例代码:
Playerplayer=Manager.createPlayer(is,"audio/x-wav");
个中第一个参数为流对象,第二个参数为声响文件的格局。
3、播放声响。
利用Player对象的start办法,能够将声响播放出来,示例代码:
player.start();
在播放声响时也能够设定声响播放的次数,可使用Player类中的setLoopCount办法来完成,详细可查阅API文档。
上面是在NOKIAS60摹拟器中测试经由过程。代码以下:
packagesound;
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
importjavax.microedition.media.*;
importjava.io.*;
publicclassSoundMIDletextendsMIDlet
{
privatePlayerplayer=null;
/**Constructor*/
publicSoundMIDlet()
{
try
{
InputStreamis=this.getClass().getResourceAsStream("/Autorun.wav");
player=Manager.createPlayer(is,"audio/x-wav");
}
catch(IOExceptione)
{
System.out.println("1:"+e);
}
catch(MediaExceptione)
{
System.out.println("2:"+e);
}
catch(Exceptione)
{
System.out.println("3:"+e);
}
}
/**Mainmethod*/
publicvoidstartApp()
{
if(player!=null)
{
try
{
player.start();
}
catch(MediaExceptione)
{
System.out.println("4:"+e);
}
}
}
/**HandlepausingtheMIDlet*/
publicvoidpauseApp()
{
}
/**HandledestroyingtheMIDlet*/
publicvoiddestroyApp(booleanunconditional)
{
}
}
十5、J2ME3D编程的一些材料
跟着J2ME手艺的开展,和硬件速率的提拔,3D游戏程序将渐渐的酿成支流,比来想进修这一块的编程,以是搜集了一些材料,和人人一同分享:
1、JSR184
JSR184是Nokia公司草拟的一个关于3DAPI的标准,下载地点为:
http://www.forum.nokia.com/main/1,,1_0_10,00.html#jsr184
2、Nokia的3D编程材料
http://www.forum.nokia.com/main/1,6566,21,00.html
3、3D引擎
一个复杂的开放源代码的3D游戏引擎
http://www.j2me.com.cn/Soft_Show.asp?SoftID=19
国际一个互助开辟3D引擎的项目:
http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?forum=11&thread=8593
4、一款3D游戏产物
http://games.sina.com.cn/newgames/2004/04/040217696.shtml
5、撑持3D的开辟工具
以后一些高真个手机撑持3D开辟,撑持3D开辟的开辟工具中,通用的有SUN的J2MEWTK2.2。公用的是厂商进步的撑持JSR184的SDK。
十6、3D编程――第一个3D程序
参考WTK2.2供应的demo,完成了第一个3D程序,固然很复杂,并且有些成绩还不是很分明,仍是把代码共享出来和乐意进修J2ME3D编程的伴侣一同进修。
关于代码的编译和运转申明以下:
1、以下代码在J2MEWTK2.2上面编译经由过程。
2、代码分为两个文件:First3DCanvas.java和First3DMIDlet.java。
3、利用J2MEWTK2.2创建新的工程,主MIDlet类为:first3d.First3DMIDlet
4、将代码保留在你的工程目次下的first3d目次下。
5、将J2MEWTK安装目次下的appsDemo3Descomsuperscapem3gwtksamplesetainedmodecontent目次中的swerve.m3g文件复制到你的工程目次下的res目次下。
6、你的工程创建后,设置工程,经由过程WTK界面中的“设置”按钮翻开设置窗口,在“API选择”中,设置“方针平台”为:自界说;“简档”为“MIDP2.0”;“设置”为“CLDC1.1”;选中“Mobile3DGraphicsforJ2ME(JSR184)”。
7、如许你就能够编译和运转以下代码了。
源代码以下:
//First3DMIDlet.java
packagefirst3d;
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassFirst3DMIDletextendsMIDlet
{
privateFirst3DCanvasdisplayable=newFirst3DCanvas();
publicvoidstartApp()
{
Display.getDisplay(this).setCurrent(displayable);
}
publicvoidpauseApp(){}
publicvoiddestroyApp(booleanunconditional){}
}
//First3Dcanvas.java
packagefirst3d;
importjavax.microedition.lcdui.*;
importjavax.microedition.m3g.*;
importjava.util.*;
/**
*第一个3D程序
*/
publicclassFirst3DCanvasextendsCanvasimplementsRunnable
{
/**World对象*/
privateWorldmyWorld=null;
/**Graphics3D对象*/
privateGraphics3Dg3d=Graphics3D.getInstance();
/**Camera对象*/
privateCameracam=null;
privateintviewport_x;
privateintviewport_y;
privateintviewport_width;
privateintviewport_height;
privatelongworldStartTime=0;
//重绘工夫
privateintvalidity=0;
publicFirst3DCanvas()
{
//启动重绘界面的线程
Threadthread=newThread(this);
thread.start();
try
{
//导进3D图片
myWorld=(World)Loader.load("/swerve.m3g");
viewport_x=0;
viewport_y=0;
viewport_width=getWidth();
viewport_height=getHeight();
cam=myWorld.getActiveCamera();
//设置cam对象
float[]params=newfloat;
inttype=cam.getProjection(params);
if(type!=Camera.GENERIC)
{
//calculatewindowaspectratio
floatwaspect=viewport_width/viewport_height;
if(waspect<params)
{
floatheight=viewport_width/params;
viewport_height=(int)height;
viewport_y=(getHeight()-viewport_height)/2;
}
else
{
floatwidth=viewport_height*params;
viewport_width=(int)width;
viewport_x=(getWidth()-viewport_width)/2;
}
}
worldStartTime=System.currentTimeMillis();
}
catch(Exceptione){}
}
protectedvoidpaint(Graphicsg)
{
//扫除背景
g.setColor(0x00);
g.fillRect(0,0,getWidth(),getHeight());
//和3D对象绑定
g3d.bindTarget(g);
g3d.setViewport(viewport_x,viewport_y,viewport_width,viewport_height);
longstartTime=System.currentTimeMillis()-worldStartTime;
validity=myWorld.animate((int)startTime);
try
{
g3d.render(myWorld);
}
finally
{
g3d.releaseTarget();
}
}
publicvoidrun()
{
try
{
while(true)
{
//重画图形
repaint(viewport_x,viewport_y,viewport_width,viewport_height);
}
}
catch(Exceptione){}
}
}
十7、在J2ME收集编程中利用CMWAP代办署理
在中国挪动供应的收集毗连中,分为CMNET和CMWAP两种,个中CMNET能够无穷制的会见互联收集,资费对照贵。CMWAP相似一个HTTP的代码,只能会见撑持HTTP的使用,可是资费廉价,不乱性对照差。
在实践的J2ME收集编程中,一样平常必要供应以CMWAP代办署理的体例毗连收集,在J2ME中,毗连的代码和间接毗连有所分歧,代码以下:
HttpConnectionhttp=(HttpConnection)Connector.open(("http://10.0.0.172/"+url);
http.setRequestProperty("X-Online-Host",ServerName);
比方你必要会见的地点为:http://www.test.com/login/loginServlet则下面的代码就为:
HttpConnectionhttp=(HttpConnection)Connector.open(("http://10.0.0.172/"+"login/loginServlet");
http.setRequestProperty("X-Online-Host","www.test.com");
在实践利用过程当中,只必要利用实践必要会见的地点的域名大概IP来取代ServerName,比方示例中的“www.test.com”,利用后续的地点类取代代码中的url,比方示例中的“login/loginServlet”,就能够实践的利用CMWAP代办署理来举行毗连了。
十8、J2ME中的工夫处置全攻略
工夫处置在程序开辟中相称罕见,上面关于工夫处置做一个复杂的申明。
1、工夫的表达体例
工夫在J2ME中有两种表达体例:
1、以和GMT1970年1月1号半夜12点和如今相差的毫秒数来代表
这类体例合适对照两个工夫之间的差值。
2、以对象的情势来表达
2、工夫处置的相干类
工夫处置在J2ME中触及三个类:
1、System类
longtime=System.currentTimeMillis();
利用该办法能够取得以后工夫,工夫的表达体例为下面提到的第一种。
2、Date类
Datedate=newDate();
取得以后工夫,利用对象的情势来举行表达。
3、Calendar类
Calendarcalendar=Calendar.getInstance();
3、工夫处置的详细操纵
1、以上三种表达体例的转换:
a)将System类取得的工夫转换为Date对象
Datedate=newDate(System.currentTimeMillis());
b)将Date范例的对象转换为Calendar范例的对象
Calendarcalendar=Calendar.getInstance();
Datedate=newDate();
calendar.setTime(date);
2、利用Calendar完成一些日期操纵:
Calendar是工夫处置中最经常使用也是功效最壮大的类,能够用它来取得某个工夫的日期、礼拜几等信息。
取得日期:
Calendarcalendar=Calendar.getInstance();
……
intday=calendar.get(Calendar.DATE);
取得日期、年份、礼拜的操纵和这个相似。
必要注重的是:Calendar中暗示月份的数字和实践相差1,即1月用数字0暗示,2月用数字1暗示,……12月用数字11暗示。
十9、J2ME中随机数字处置全攻略
在程序中天生随机数字,用途对照,如野生智能范畴等等,这里关于在J2ME中天生随机数的操纵举行一个复杂的收拾,但愿对人人能有匡助。
J2ME和J2SE分歧,不克不及利用Math类的random来天生随机数字,只能利用java.util包的Random类来天生随机数字。
1、创立Random范例的对象:
Randomrandom=newRandom();
Randomrandom=newRandom(10010010);
以上两种是创立Random对象的体例,第一种利用默许机关办法,和以下的代码感化完整等价:
Randomrandom=newRandom(System.currentTimeMillis());
相称与利用以后工夫作为种子数字来举行创立。
第二种体例经由过程本人来指定种子数字来举行创立。
人人能够依据必要利用以上两种体例的任一种。
2、天生随机数字:
创立好了随机对象今后,我们就能够来天生随机数字了:
天生随机整数:
intk=random.nextInt();
天生随机长整数:
longl=random.nextLong();
3、天生指定局限的数字:
比方天生0-10之间的随机数字:
intk=random.nextInt();
intj=Math.abs(k%10);
起首天生一个随机整数k,然后用k和10取余,最初利用Math类的abs办法取相对值,取得0-10之间的随机数字。
取得0-15之间的随机数,相似:
intk=random.nextInt();
intj=Math.abs(k%15);
取得10-20之间的随机数字:
intk=random.nextInt();
intj=Math.abs(k%10)+10;
二10、在J2ME手机编程中利用字体
在J2ME手机编程中,能够经由过程利用字体类――Font在初级用户界面中,取得更好的体现效果,那末怎样利用Font类呢?
起首,因为手机设备的限定,手机中撑持的字体范例很无限,以是在J2ME中只能利用手机撑持的默许字体来机关Font类对象。上面是创立Font类的对象时利用的办法:
getFont(intface,intstyle,intsize);
比方:
Fontfont=Font.getFont(Font.FACE_SYSTEM,Font.STYLE_BOLD,Font.SIZE_MEDIUM);
不管哪个参数,都只能利用体系设置的数值,这些数值详细的巨细在分歧的手机上大概分歧。上面关于个中的三个参数的取值做具体的先容:
face参数指字体的表面,其的取值:
FACE_MONOSPACE――等宽字体
FACE_PROPORTIONAL――平衡字体
FACE_SYSTEM――体系字体
style参数指字体的款式,其的取值:
STYLE_BOLD――粗体
STYLE_ITALIC――斜体
STYLE_PLAIN――一般
STYLE_UNDERLINED――下划线
STYLE_BOLD|STYLE_ITALIC――粗斜体
STYLE_UNDERLINED|STYLE_BOLD――带下划线粗体
STYLE_UNDERLINED|STYLE_ITALIC――带下划线斜体
STYLE_UNDERLINED|STYLE_ITALIC|STYLE_BOLD――带下划线的粗斜体
size参数指字体的巨细,其的取值:
SIZE_SMALL――小
SIZE_MEDIUM――中
SIZE_LARGE――年夜
经由过程下面的参数的值,能够组合出你必要的字体对象。
上面是一些经常使用的字体操纵:
1.取得体系的默许字体:
Fontfont=Font.getDefaultFont();
2.在panit办法外部,假定Graphics参数的称号为g,则取得以后字体的办法是:
Fontfont=g.getFont();
3.在panit办法外部,假定Graphics参数的称号为g,则设置以后字体的办法是:
g.setFont(font);
个中font为你机关好的字体对象。
4.在MIDP2.0中,List能够设置每行的字体魄式,办法是:
list.setFont(0,font);
则下面的代码是将list中的第一行设置为font范例的字体。
二11、在J2ME手机程序开辟中利用色彩
在J2ME手机开辟过程当中,必要常常用到色彩来举行绘制,加强程序的体现效果,上面就先容一下怎样利用色彩。
因为J2ME手艺对照复杂,以是没有完成专门的色彩类,而只是利用RGB的观点来代表色彩。这里复杂先容一下RGB的观点,色彩是由红(Red)、绿(Green)、蓝(Blue)三原色构成的,以是可使用这三个色彩的组合来代表一种详细的色彩,个中R、G、B的每一个数值都位于0-255之间。在表达色彩的时分,便可以利用三个数字来表达,也能够利用一个格局如0X00RRGGBB如许格局的十六进制来表达,上面是罕见色彩的表达情势:
白色:(255,0,0)或0x00FF0000
绿色:(0,255,0)或0x0000FF00
蓝色:(255,255,255)或0x00FFFFFF
其他色彩也能够经由过程下面的体例组合出来。
晓得了色彩的表达体例今后,上面来先容一下怎样在J2ME程序中利用色彩,触及的办法均在Graphics类中,有以下几个:
1.getColor():
取得以后利用的色彩,前往值是0x00RRGGBB格局的数字。比方:
intcolor=g.getColor();
个中g为Graphics范例的对象。
2.setColor(intRGB):
设置利用的色彩。比方:
g.setColor(0x00ff0000);
3.setColor(intred,intgreen,intblue)
和下面的办法感化一样,比方:
g.setColor(255,0,0);
在设置了Graphics利用的色彩今后,再举行绘制的时分,就能够绘制指定的色彩了。
二12、在J2ME联网使用中取得客户真个手机号码
在J2ME程序开辟过程当中,为了必定的必要,常常必要来取得用户的手机号码,可是这个功效却在尺度的J2ME类库中没有供应。
在利用中国挪动的CMWAP体例毗连收集时,中国挪动会将用户的手机号码放在一个称号为x-up-calling-line-id的头信息中,能够经由过程读取该头信息,取得用户的手机号码,详细代码以下:
Stringusermphone=http.getHeader("x-up-calling-line-id");
个中http是HttpConnction范例的对象。
二十3、利用J2ME发送手机短信息
在程序中,发送短信息的体例一样平常有三种:
1、利用程序在收集上发送短信息,比方各年夜网站的短信营业。这类体例是经由过程程序将信息发送给运营商的网关服务器,然后经由过程运营商的收集发送给手机。
2、在盘算机中,经由过程数据线毗连得手机,然后经由过程手机来发送短信息。这类体例是经由过程利用AT指令来完成。爱立信手机的AT指令你能够在以下地点找到:http://mobilityworld.ericsson.com.cn/development/download_hit.asp
3、经由过程在手机中运转的程序来发送短信息。这个恰是本文完成的体例。
在J2ME中,假如想发送短信息,必要利用WMA包,MIDP2.0中已包括,MIDP1.0中能够经由过程厂商供应的扩大API完成,和WMA的类库基础一样。
上面是利用WMA向指定手机号码发送短信息的一个办法,很复杂。固然WMA也供应了其他的体例来发送更多的内容。
//SMSUtil.java
packagemy.util;
importjavax.wireless.messaging.*;
importjavax.microedition.io.*;
/**
*发送文本短信息的办法
*/
publicclassSMSUtil
{
/**
*给指定号码发送短信息
*@paramcontent短信息内容
*@paramphoneNumber手机号码
*@return发送乐成前往true,不然前往false
*/
publicstaticbooleansend(Stringcontent,StringphoneNumber)
{
//前往值
booleanresult=true;
try
{
//地点
Stringaddress="sms://+"+phoneNumber;
//创建毗连
MessageConnectionconn=(MessageConnection)Connector.open(address);
//设置短信息范例为文本,短信息有文本和二进制两品种型
TextMessagemsg=(TextMessage)conn.newMessage(MessageConnection.TEXT_MESSAGE);
//设相信息内容
msg.setPayloadText(content);
//发送
conn.send(msg);
}
catch(Exceptione)
{
result=false;
//未处置
}
returnresult;
}
}
二十4、利用复杂的J2ME程序测试MIDlet的性命周期
在MIDlet程序进修中,性命周期是一个对照笼统的观点。实在性命周期就是一个复杂的划定,划定了MIDlet中的每一个办法,甚么时分被体系挪用。上面是一个示例代码,在每一个办法的外部都输入一条语句,能够依据程序的输入了局来考证各办法被挪用的按次,详细代码以下:
//文件名:LifeCircleMIDlet.java
importjavax.microedition.midlet.*;
/**
*测试MIDlet的性命周期
*/
publicclassLifeCircleMIDletextendsMIDlet
{
/**
*默许机关办法
*/
publicLifeCircleMIDlet()
{
System.out.println("默许机关办法");
}
/**
*启动办法
*/
publicvoidstartApp()
{
System.out.println("startApp办法");
}
/**
*停息办法
*/
publicvoidpauseApp()
{
System.out.println("pauseApp办法");
}
/**
*烧毁办法
*@paramb
*/
publicvoiddestroyApp(booleanb)
{
System.out.println("destroyApp办法");
}
}
在J2WTK中运转该程序时,可使用扫瞄器中的“MIDlet”菜单中的停息和恢复菜单,摹拟停息事务。
二十5、利用OTA来公布你的程序
尽人皆知,J2ME程序公布的情势次要有:OTA、数据线传输、红外和蓝牙传输等。这里复杂说说怎样经由过程OTA来公布你的程序。
OTA是OverTheAir的简写,也就是经由过程收集下载,这是次要的公布情势之一。如今的百宝箱都是接纳这类情势。
利用OTA来公布程序,必要以下几个步骤:
1、在你的WEB服务器上增加关于jad和jar文件的MIME撑持。
后缀名:jad
MIME范例:text/vnd.sun.j2me.app-descriptor
后缀名:jar
MIME范例:application/java-archive
2、公布WML页面:
比方你的jar文件名test.jad,则最复杂的下载页面是:
<?xmlversion="1.0"?>
<!DOCTYPEwmlPUBLIC"-//WAPFORUM//DTDWML1.3//EN"
"http://www.wapforum.org/DTD/wml13.dtd">
<wml>
<cardid="card1"title="DownloadMidlet">
<ahref="test.jad">test</a>
</card>
</wml>
你能够将以上代码保留在WEB服务器上,比方保留为text.wml
3、修正jad文件:
在jad文件中增添 MIDlet-Jar-URL:http://domain/directory/test.jar
个中的http://domain/directory/test.jar为你的jar文件的路径。
经由下面的设置,你就能够将你的wml页面路径作为你的WAP下载页面公布了。用户只必要在手机上输出这个路径就能够会见和下载你的程序了。
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉, 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 是一种将安全性(Security)列为第一优先考虑的语言 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 是一种突破用户端机器环境和CPU 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种将安全性(Security)列为第一优先考虑的语言 至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。 是一种将安全性(Security)列为第一优先考虑的语言 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言 你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。
页:
[1]