requestConnect();}
}
修改commandAction函数:
public void commandAction(Command c, Displayable s) {
if(c==sendCommand){
if(c==sendCommand){
//创建新线程
new Thread(new ConnectPipe()).start();
}
else if(c==backCommand){
……
}}
修改之后程序能够较为顺利的运行,当处理网络连接的时候,启动一个线程后主线程会立刻返回,两个线程并行,不会引发在此地堵塞。其工作原理可用图3的工作原理图b来表示。
修改之后程序能够较为顺利的运行,当处理网络连接的时候,启动一个线程后主线程会立刻返回,两个线程并行,不会引发在此地堵塞。其工作原理可用图3的工作原理图b来表示。

图3 工作原理图b
详细分析图3,又发现尽管程序可以正常工作,但是每次用户按下按钮的时候都会有新的线程产生,这样显然不够高效,同时,异步的行为又有可能使两个线程间产生死锁。幸好java中提供了wait()和notify()/notifyAll()来进行线程间的通讯,协调同步问题。那么对应本程序中的线程同步问题,设计思想如下:启动线程后,让其进入等待的状态,当用户激活Command事件的时候唤醒线程,才让其继续运行。代码类似如下:
public synchronized void run() {
while (dealing) {
try { wait(); }//线程等待
catch (InterruptedException ie) {}
if (dealing) requestConnect();}}
public synchronized void run() {
while (dealing) {
try { wait(); }//线程等待
catch (InterruptedException ie) {}
if (dealing) requestConnect();}}
public synchronized void deal() {
notify();//唤醒线程}
其中dealing变量用于定义一个锁,当其为true时,当前线程等待,直到用户激活Command事件之后,调用deal()方法中的notify()唤醒当前线程继续运行。这样程序就显得相当的高效,也在很大程度上避免了线程间的死锁问题。其工作原理可用图4的工作原理图c来表示。
notify();//唤醒线程}
其中dealing变量用于定义一个锁,当其为true时,当前线程等待,直到用户激活Command事件之后,调用deal()方法中的notify()唤醒当前线程继续运行。这样程序就显得相当的高效,也在很大程度上避免了线程间的死锁问题。其工作原理可用图4的工作原理图c来表示。

图4 工作原理图c
2.2 利用系统类Timer和TimerTask
系统类Timer类是一个计时器,和TimerTask类结合可以来实现在MIDlet中定时执行特定任务。需要说明的是每一个Timer对象实际上都是一个后台运行的独立的线程。这是因为调度一次的任务都是由TimerTask类的实现对象负责,TimerTask类是一个抽象类,它的主要特点是实现了Runnable接口,因此扩展了必须实现的public void run()方法。
所以,在J2ME的网络编程中,我们可以利用Timer类和TimerTask类来建立线程,完成网络连接等工作。设计思想如下:创建一个Timer类计时器,一个完成网络连接功能的TimerTask类,在系统空闲时,反复调度任务要求连接,直到连接成功,再调用TimerTask类的cancel()可以停止一个具体的调度任务。核心代码类似如下:
class ConnectTimer implement TimerTask{
ConnectTimer (){
m_Timer = new Timer();//定义Timer
m_Timer.schedule(this,500,5000); //调度任务
}
……
public synchronized void run(){
requestConnect();//连接方法
cancel();//取消任务
}}
public void commandAction(Command c, Displayable s) {
if(c==sendCommand){
if(c==sendCommand){
new ConnectTimer;}
else if(c==backCommand){
……}}
3 结束语
综上所述,在J2ME的应用开发中网络程序的设计具有重要的地位,而编程的关键又在于编写高效友好的J2ME网络连接程序。通过Java语言内置的多线程处理机制,利用线程进行同步并行处理,解决了网络连接时的阻塞问题,达到了程序高效运行的目的。
参考文献
[1] 卢军. J2ME 应用程序开发:手机、PDA程序开发捷径[M]. 中国铁道出版社,2002
[2] 黄聪明. Java移动通信程序设计[M]. 清华大学出版社,2002
[3] (美)James Keogh. J2ME开发大全[M]. 清华大学出版社,2004
[4] Leopold Lee . J2ME手机编程基础[M]. 清华大学出版社,2003.
[5] Kim Topley. J2ME in a Nutshell (O'Reilly Java) (Paperback) [M]. 2003