文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 国产软件 | 国外软件 | 汉化补丁 | 设为首页 | 加入收藏
业界资讯 | 图形图像 | 操作系统 | 网络冲浪 | 工具软件 | 办公软件 | 媒体动画 | 精文荟萃 | 认证考试 | 网站建设 | 技术开发 | 专栏
当前位置:abcdown网络学院程序开发Java多线程在JAVA ME应用程序中的使用
精品广告
推荐TOP10
·实例讲解:Java中的SOAP技术
·Java语言出现的背景 影响及前景
·Java精华积累:初学者都应该搞懂的问题
·Java多媒体框架设计自动播放机实例详解
·如何有效防止Java程序源码被人偷窥?
·Cell插件在J2EE系统中的应用
·初学者想学Hibernate,初级基础教程
·Java语言实现支持视频点播的WEB服务器
·关于Java编程的中文问题的几条分析原则
·确保J2ME无线移动商业应用程序的安全性
阅读TOP10
·在桌面应用中使用JAVA DB
·Java多媒体框架设计自动播放机实例详解
·Java语言实现支持视频点播的WEB服务器
·好东西介绍,直接用 java 命令行动态生成jpg文件
·如何有效防止Java程序源码被人偷窥?
·初学者想学Hibernate,初级基础教程
·Hibernate中的Session什么时候关闭?
·垃圾清理势在必行——Java垃圾收集算法
·Java精华积累:初学者都应该搞懂的问题
·Java关于克隆与“冷藏”和“解冻”方法

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

日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]


    多线程技术是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中的方法,而没有重新创建一个线程。代码如下:


[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] 下一页 

上一篇:java入门-Java对象及其引用

下一篇:Java多线程编程基础之线程对象


相关软件: 相关文章:
·多线程在JAVA ME应用程序中的使用

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.abcdown.net
首页 | 本站声明 | 下载帮助 | 发布软件 |
中文版权所有:ABC学院 浙ICP备05000717号