分享
 
 
 

多线程在JAVA ME应用程序中的使用

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

多线程技术是Java ME中的要害技术,应用十分频繁,尤其是在游戏中。但是对于新手来说,又轻易忽略或错误的使用多线程,导致程序堵塞,而无法响应用户的输入请求。

由于笔者对于游戏开发不是十分了解,所以本文将仅就多线程技术在JAVA ME应用程序中的使用展开讨论。本文主要包含如下部分:

多线程与联网

多线程与拍照

Timer与TimerTask

多线程与联网

手机中,所有的MIDlet程序都是由Application Manager Software(AMS)治理的。当MIDlet初始化后,AMS就会调用MIDlet的startApp()方法,此时MIDlet就进入了Acitive状态。在JAVA ME中有些操作可能会导致程序堵塞,比如连接网络等。假如这些操作与主程序在同一个主线程中完成,那么由于堵塞会造成程序长时间无法返回,也就无法响应用户的其他操作了。所以,假如我们在commandAction()中进行了联网的操作,则会造成如上所述的情况。

下面,将通过一个例子来演示如上的情况,并使用多线程最终解决此问题。这是一个“Echo Message”实例,手机端向服务器端发送一条消息,服务器得到此消息后直接返回给手机端。

首先,创建一个NetworkConnection类来封装联网相关的操作,这样,MIDlet中只需调用此类中的方法就可以完成联网的操作。代码如下:

以下是引用片段:

/*

* NetworkConnection.java

*

* Created on 2006年7月20日, 下午2:54

*

*/

package nju.hysteria.thread.connection;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import javax.microedition.io.Connector;

import javax.microedition.io.HttpConnection;

/**

*

* @author Magic

*/

public class NetworkConnection {

private static final String URL = "http://localhost:8080/thread/";

private HttpConnection httpConnection;

private String message;

public NetworkConnection(String message) {

this.message = message;

connect();

}

/**

* Connect to web server.

*

*/

public void connect(){

try {

httpConnection = (HttpConnection) Connector.open(URL);

httpConnection.setRequestMethod(HttpConnection.POST);

} catch (IOException ex) {

System.out.println("Can not open connection!");

ex.printStackTrace();

}

}

/**

* Send message to server.

* @throws java.io.IOException

*/

public void sendMessage() throws IOException{

DataOutputStream out = httpConnection.openDataOutputStream();

out.writeUTF(message);

out.close();

}

/**

* Receive message from server.

* @throws java.io.IOException

* @return

*/

public String receiveMessage() throws IOException {

DataInputStream in = httpConnection.openDataInputStream();

String message = in.readUTF();

in.close();

return message;

}

/**

* Close connection.

*/

public void close(){

if(httpConnection!=null){

try {

httpConnection.close();

} catch (IOException ex) {

ex.printStackTrace();

}

}

}

}

构造函数的参数是将要被发送的消息。服务器端的代码在此不再列出,具体请见本文的源代码。

接着,我们写一个MIDlet调用类中的方法。MalConnectionMidlet在commandAction()方法中直接调用NetworkConnection中的方法,而没有重新创建一个线程。代码如下:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有