📄 j2me中多线程网络连接编程的分析-软件-j2me-天极yesky.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0039)http://soft.yesky.com/494/2462994.shtml -->
<HTML lang=zh-CN xmlns="http://www.w3.org/1999/xhtml"><HEAD><TITLE>J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky</TITLE>
<META content=J2ME中多线程网络连接编程的分析, name=description>
<META content=J2ME中多线程网络连接编程的分析, name=keywords>
<META content="天极Yesky | 全球中文IT第一门户" name=author>
<META content="天极Yesky | 全球中文IT第一门户" name=Copyright>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=Content-Language content=zh-CN><LINK media=all
href="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/y_mobile_content.css"
type=text/css rel=stylesheet>
<SCRIPT src="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/showlay.js"></SCRIPT>
<META content="MSHTML 6.00.2900.3132" name=GENERATOR></HEAD>
<BODY><!--页面头部--><!--头部-->
<DIV id=topmenu><A href="http://www.yesky.com/">Yesky首页</A>| <A
href="http://product.yesky.com/">产品报价</A>| <A
href="http://cseek.yesky.com/">行情</A>| <A href="http://mobile.yesky.com/">手机</A>
| <A href="http://digital.yesky.com/">数码</A> | <A
href="http://notebook.yesky.com/">笔记本</A> | <A
href="http://pc.yesky.com/">台式机</A> | <A href="http://diy.yesky.com/">DIY硬件</A>
| <A href="http://oa.yesky.com/">外设</A> | <A href="http://net.yesky.com/">网络</A>
| <A href="http://dh.yesky.com/">数字家庭</A> | <A
href="http://lab.yesky.com/">评测</A> | <A href="http://soft.yesky.com/">软件</A> |
<A href="http://e.yesky.com/">e时代</A> | <A href="http://game.yesky.com/">游戏</A>
| <A href="http://pic.yesky.com/">图片</A> | <A
href="http://desktop.yesky.com/">壁纸</A> | <A href="http://q.yesky.com/">群乐</A> |
<A href="http://my.yesky.com/">社区</A> | <A href="http://blog.yesky.com/">博客</A>
| <A href="http://www.mydown.com/">下载</A></DIV>
<DIV id=topbox>
<DIV class=tleft><A href="http://www.yesky.com/"><IMG alt=天极Yesky_全球中文IT第一门户
src="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/logo.gif" border=0></A></DIV>
<DIV class=tad><SPAN id=ad1></SPAN></DIV>
<DIV id=search>
<DIV>
<FORM name=searchform action=http://search.chinabyte.com/search method=get
target=_blank><INPUT id=searchzz onmouseover=this.focus() onfocus=this.select()
name=q><INPUT type=hidden value=GB2312 name=encoding><INPUT type=hidden
value=connect name=dir><INPUT type=hidden value=20002 name=cid><INPUT id=search_btn type=submit value=天极搜索> </FORM></DIV>
<DIV class=tdq>
<DIV class=rightarea><A href="http://bj.yesky.com/">北京</A> <A
href="http://hd.yesky.com/">上海</A> <A href="http://gd.yesky.com/">广东</A> <A
href="http://xa.yesky.com/">西安</A><BR><A href="http://cq.yesky.com/">重庆</A> <A
href="http://cd.yesky.com/">成都</A> <A href="http://sy.yesky.com/">沈阳</A> <A
href="http://js.yesky.com/">江苏</A> </DIV>
<DIV class=rightarea_right><A
href="http://my.yesky.com/">用户<BR>登录</A></DIV></DIV></DIV>
<DIV class=tright>
<DIV class=box1>
<SCRIPT src="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/content_text_ad.js"
type=text/javascript></SCRIPT>
</DIV></DIV></DIV>
<SCRIPT src="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/flash.js"
type=text/javascript></SCRIPT>
<DIV id=childmenu><A href="http://soft.yesky.com/">软件频道></A><A
href="http://design.yesky.com/">设计</A><A href="http://tools.yesky.com/">工具</A><A
href="http://os.yesky.com/">系统</A><A href="http://dev.yesky.com/">开发</A><A
href="http://soft.yesky.com/office/">办公</A><A
href="http://homepage.yesky.com/">陶吧</A><A
href="http://soft.yesky.com/security/">安全</A><A
href="http://edu.yesky.com/">IT教育</A><A
href="http://vista.yesky.com/">Vista频道</A>|<A
href="http://soft.yesky.com/lesson/">软件频道产品中心</A><A
href="http://q.yesky.com/group/search.do?cid=661">群乐</A><A
href="http://www.mydown.com/soft/">软件下载</A><A
href="http://q.yesky.com/group/179"><FONT
color=#ff0000>群乐:大家耍QQ</FONT></A></DIV><!--导航条-->
<DIV id=location>
<DIV class=loleft>您现在的位置: <A href="http://www.yesky.com/">天极Yesky</A> > <A
href="http://soft.yesky.com/">软件频道</A> > J2ME中多线程网络连接编程的分析</DIV>
<DIV class=adright><SPAN id=ad2></SPAN></DIV></DIV><!--内容块开始-->
<DIV id=conbox><!--左边开始-->
<DIV id=conleft>
<DIV id=contopla1>
<DIV id=__001>
<DIV class=qkong></DIV>
<DIV class=qw1>全文</DIV>
<DIV class=zkong>
<DIV class=kl></DIV>
<DIV class=bj><A href="http://soft.yesky.com/494/2462994.shtml#pls"
target=_self>评论</A></DIV>
<DIV class=kr></DIV>
<SCRIPT type=text/javascript>
var titiepic ="#";
if (titiepic!="#")
{
document.write("<div class=\"kl\"></div><div class=\"bj\"><a href=\"#\" target=\"_blank\">图片</a></div><div class=\"kr\"></div>");
}
</SCRIPT>
</DIV></DIV></DIV>
<DIV class=topadbg><SPAN id=ad10></SPAN></DIV><A name=top></A>
<DIV id=contitle>
<H1>J2ME中多线程网络连接编程的分析</H1></DIV>
<DIV id=conauthor><SPAN>2006-06-28 06:00 </SPAN><SPAN>作者: 梁旗军 李佳凯 樊鑫
</SPAN><SPAN>出处: 计算机与信息技术 </SPAN><SPAN>责任编辑:<A title=向本编辑提问
href="http://comments.yesky.com/t/·½ÖÛ/6,324/2462994.shtml" target=_blank>方舟</A>
</SPAN></DIV>
<DIV class=topadbg><SPAN id=ad9></SPAN></DIV>
<DIV id=conneirong><SPAN id=ad3></SPAN>
<DIV class=guanggao><SPAN id=contentAdv></SPAN></DIV>
<TABLE borderColor=#ffffff cellSpacing=1 width=180 border=0>
<TBODY>
<TR>
<TD borderColor=#003399 width=202 bgColor=#ffffff height=33><IMG
style="BORDER-LEFT-COLOR: #000000; BORDER-BOTTOM-COLOR: #000000; BORDER-TOP-COLOR: #000000; BORDER-RIGHT-COLOR: #000000"
src="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/t7x57oa8m479.jpg"
border=0></TD></TR>
<TR>
<TD borderColor=#003399 bgColor=#ffffcc>
<DIV align=center><STRONG>相关专区</STRONG></DIV></TD></TR>
<TR>
<TD borderColor=#003399 bgColor=#cccccc>
<TABLE cellSpacing=0 width=180 bgColor=#cccccc border=0>
<TBODY>
<TR>
<TD width="50%">·<A href="http://dev.yesky.com/javarumen/"
target=_blank>初学者专区</A></TD>
<TD>·<A href="http://dev.yesky.com/javagaoji/"
target=_blank>高级技术</A></TD></TR>
<TR>
<TD>·<A
href="http://soft.yesky.com/lesson/multimedia/javamultimedia/"
target=_blank>图像与多媒体</A></TD>
<TD>·<A href="http://dev.yesky.com/javarumen/"
target=_blank>网络编程</A></TD></TR>
<TR>
<TD>·<A href="http://dev.yesky.com/javaopen/"
target=_blank>Java开源</A></TD>
<TD>·<A href="http://dev.yesky.com/javaide/javaeclipse/"
target=_blank>Eclipse</A></TD></TR>
<TR>
<TD>·<A href="http://dev.yesky.com/ejb/" target=_blank>EJB开发</A> </TD>
<TD>·<A href="http://dev.yesky.com/javamode/" target=_blank>设计模式</A>
</TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD borderColor=#003399 bgColor=#cecaa6>
<DIV align=center><STRONG>精彩专题</STRONG></DIV></TD></TR>
<TR>
<TD borderColor=#003399 bgColor=#bfbfff>
<TABLE cellSpacing=0 width=180 border=0>
<TBODY>
<TR>
<TD width="50%"><A class=black-b
href="http://soft.yesky.com/lesson/173/2442673.shtml">·<SPAN
class=style2>Java6新功能</SPAN></A> </TD>
<TD>·<A class=blue-d
href="http://soft.yesky.com/lesson/403/2325903.shtml">Borland传奇</A></TD></TR>
<TR>
<TD>·<A class=blue-d
href="http://soft.yesky.com/lesson/270/2033770.shtml">JBuilder05</A></TD>
<TD>·<A class=blue-d
href="http://www.yesky.com/zhuanti/391/1918891.shtml">EJB
3.0</A></TD></TR>
<TR>
<TD>·<A class=blue-d
href="http://www.yesky.com/zhuanti/189/1781689.shtml">Servlet
API</A></TD>
<TD>·<A class=blue-d
href="http://www.yesky.com/zhuanti/443/1865943.shtml">JDBC入门讲座</A></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD borderColor=#003399 bgColor=#dab4ef>
<DIV align=center><STRONG>主题社区</STRONG></DIV></TD></TR>
<TR>
<TD borderColor=#003399 bgColor=#ffdfdf>
<TABLE cellSpacing=0 width=180 border=0>
<TBODY>
<TR>
<TD width="50%"><A
href="http://comments.yesky.com/t/294314/0/0.shtml">·Java源码</A></TD>
<TD>·<A href="http://comments.yesky.com/t/163369/0/0.shtml"
target=_blank>Java</A></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE><BR> <B>摘
要</B> 介绍并分析了J2ME的通用<A class=bluekey href="http://net.yesky.com/"
target=_blank>网络</A>连接框架(GCF),并以此为基础,指出了在J2ME网络连接编程中存在的问题,并提出了通过构建多线程的两种解决方法。<BR><BR> <B>关键词</B>
J2ME GCF多线程 网络连接<BR><BR> <B>引言</B><BR> <BR> J2ME(Java 2 Micro Edition)是Java
2的一个组成部分,它与J2SE、J2EE并称。J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话、可视电话、数字机顶盒和汽车导航系统等等。即J2ME是为消费电子产品和手持设备量身定制的Java专用版本。<BR>J2ME的出现使开发跨平台的消费类电子产品的应用软件成为可能。Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。它提供了基于HTTP的高级Internet协议,使移动电话能以Client/Server方式直接访问Internet的全部信息,从而使得不同的Client访问不同的资源。<BR><BR> 在将来的无线通信时代中,大量的网络应用程序将被开发出来去满足无线移动通讯的要求,而要充分的发挥无线移动通讯设备的通信能力,J2ME网络编程就变得尤为重要。那么为了高效地进行网络编程,就要利用Java语言的多线程编程机制。<BR><BR> <B>1、J2ME的网络连接框架(GCF)</B><BR><BR> 通用连接框架(Generic
Connection Framework,GCF)为资源有限的设备提供了一个可扩展的、通用的I/O 框架。GCF 是一组在
javax.microedition.io 包中定义的接口。图 1 <A class=bluekey
href="http://diy.yesky.com/monitor/" target=_blank>显示</A>了 GCF 的类层次结构。<BR><BR>
<TABLE width="90%" align=center>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG
src="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/8v3m1b5vvdn4.jpg"
border=0><BR>图1 GCF 的类层次结构</DIV></TD></TR></TBODY></TABLE><BR> 在 GCF 中共定义了七个接口
,其中 Connection 是最基本的连接类型。且同时提供了对数据包和流连接的支持。沿着层次结构向下派生出提供更多功能的接口。例如,
StreamConnection 接口支持输入流和输出流, ContentConnection接口又扩展了 StreamConnection
接口以支持对流的内容类型、数据长度和编码格式的确定,HttpConnection接口又扩展了ContentConnection接口以支持对于标准的HTTP请求。如在框架层规定的适用于<A
class=bluekey href="http://product.yesky.com/catalog/0/291/"
target=_blank>手机</A>或双向寻呼机的移动信息设备框架MIDP(Mobile Information Device Profile)在其MIDP
1.0 规范只要求设备支持 HTTP 连接协议,而更新的 MIDP 2.0 规范要求同时支持 HTTP 和
HTTPS,后者提供了对更安全的网络连接的支持。<BR><BR> <B>2、网络编程中的多线程</B><BR><BR> 由于目标设备具有<A
class=bluekey href="http://diy.yesky.com/memoery/"
target=_blank>内存</A>小,计算能力弱和电池供电等特点,所以如何使应用程序高效的运行就成为开发中的一个大问题.尤其针对手机等移动信息设备时,无线通讯的特点又对我们的程序提出了更高的要求.从代码优化的角度,在网络编程中引入多线程就显得十分重要。<BR><BR> 当程序运行的时候,Application
Management
Software(应用管理软件)首先初始化一个MIDlet,然后调用它的startApp()方法使得MIDlet进入active状态,这条程序分支就是主线程,它执行其他的方法后都会返回到这个分支上来继续执行。然而网络连接是个可能堵塞的操作,意味着它可能长时间都不返回。<BR><BR> 在SUN公司的无线开发包WTK中模拟一段网络连接程序运行时,WTK会提示网络连接工作可能会堵塞用户输入,需要创建另外一个线程去进行联网操作。针对以上情况,引入多线程的处理机制。<BR><BR> 2.1
利用Thread类与Runnable接口<BR><BR> 编写J2ME网络连接应用程序的时候往往借助Command显示部件,调用其事件处理函数完成网络的连接工作,代码框架如下:<BR><BR>
<TABLE borderColor=#cccccc width="90%" align=center bgColor=#e1e1e1 border=1>
<TBODY>
<TR>
<TD>public void commandAction(Command c, Displayable s)
{<BR> if(c==sendCommand){<BR> requestConnect();//连接方法<BR> }<BR> else
if(<BR> c==backCommand){<BR> display.setCurrent(mainForm);
}<BR> else{<BR> destroyApp(false);<BR> notifyDestroyed(); }<BR>}<BR>//
获取一个HTTP的连接<BR>private void requestConnect() {<BR> String url=
URL.URLString <BR> HttpConnection hpc = null;<BR> try{<BR> hpc =
(HttpConnection)Connector.open(url);<BR> int status =
hpc.getResponseCode();<BR> if(status !=
HttpConnection.HTTP_OK)<BR> content = "联机失败!";<BR> else<BR> content =
"已联机!";<BR> }<BR> catch(IOException
e){System.out.println(content);}<BR> try{<BR> if(hpc != null)
hpc.close();<BR> }<BR> catch(IOException
e2){}}</TD></TR></TBODY></TABLE><BR> 上面的程序工作原理可用图2的工作原理图a来表示。<BR><BR>
<TABLE width="90%" align=center>
<TBODY>
<TR>
<TD>
<DIV align=center><IMG
src="J2ME中多线程网络连接编程的分析-软件-J2ME-天极Yesky.files/be9t7r9bi6e6.jpg"
border=0><BR>图2
工作原理图a</DIV></TD></TR></TBODY></TABLE><BR> 分析图2可以得出,如果这样的网络连接程序在手机上运行,那么将可能长时间得不到响应。因为连接工作只有一个主线程,所有的应用都是在这个主线程当中进行的,如果此主线程不返回,那么就不能进行后面的行为,用户也不能进行任何操作。
<BR><BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -