`
geelong
  • 浏览: 117142 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

j2me 线程

    博客分类:
  • j2me
阅读更多

package http;

import java.io.DataInputStream;
import java.io.IOException;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class HttpServlet2 extends MIDlet implements CommandListener{

    private Display dis;
    private Form frm=new Form("网页信息为");  //记住new
    private TextField tf=new TextField("输入地址","",50,TextField.ANY);
    private Command submit=new Command("登陆",Command.SCREEN,1);
   
    public HttpServlet2() {
        // TODO Auto-generated constructor stub
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
        // TODO Auto-generated method stub

    }

    protected void pauseApp() {
        // TODO Auto-generated method stub

    }

    protected void startApp() throws MIDletStateChangeException {
        // TODO Auto-generated method stub
        dis=Display.getDisplay(this);
        dis.setCurrent(frm);
        frm.addCommand(submit);
        frm.append(tf);
        frm.setCommandListener(this);


    }

    public void commandAction(Command c, Displayable d) {
        // TODO Auto-generated method stub
        if(c==submit){
//            String url=tf.getString();  //获取登陆的url
//            "http://localhost:8080/lbs/mobile_terminal?"
//            +"TS==1234567891&UserID=10226&StartIndex=1&Count=5"
//            url+="mobile_terminal?TS==1234567891&UserID=10226&Cmd=GetMyGifts&StartIndex=1&Count=5";
            try {
                HttpConnection hc=(HttpConnection)Connector.open("http://localhost:8080/lbs/mobile_terminal?TS=1234567891&UserID=10226&Cmd=GetMyGifts&StartIndex=1&Count=5");
                System.out.println(hc.getResponseCode());
                DataInputStream di=hc.openDataInputStream();
                int length=(int) hc.getLength();  //读servlet居然是负数
//                byte [] b= new byte[length];
                System.out.println(length);
                byte [] b= new byte[1000];
                di.read(b);
                String str=new String(b);
                System.out.print(str);
                frm.append(str);

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
        }
       
    }

}

 

 

Warning: To avoid potential deadlock, operations that may block, such as
 networking, should be performed in a different thread than the
 commandAction() handler.

 

以上代码不能执行,可能造成死锁

 

 

解决办法

改用线程

 

 

package http;

import java.io.DataInputStream;
import java.io.IOException;

import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class HttpServlet2 extends MIDlet implements CommandListener{

    private Display dis;
    private Form frm=new Form("网页信息为");  //记住new
    private TextField tf=new TextField("输入地址","",50,TextField.ANY);
    private Command submit=new Command("登陆",Command.SCREEN,1);
   
    public HttpServlet2() {
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
    }

    protected void pauseApp() {
    }

    protected void startApp() throws MIDletStateChangeException {
        dis=Display.getDisplay(this);
        dis.setCurrent(frm);
        frm.addCommand(submit);
        frm.append(tf);
        frm.setCommandListener(this);


    }

    public void commandAction(Command c, Displayable d) {
        if(c==submit){
        ThreadDemo td=new ThreadDemo();
        td.start();
           
        }
       
    }
   
    class ThreadDemo extends Thread{
        public void run(){
            try {
                HttpConnection hc=(HttpConnection)Connector.open(tf.getString()+"mobile_terminal?TS=1234567891&UserID=10226&Cmd=GetMyGifts&StartIndex=1&Count=5");
                System.out.println(hc.getResponseCode());
                DataInputStream di=hc.openDataInputStream();
                int length=(int) hc.getLength();  //读servlet居然是负数
                System.out.println(length);
                byte [] b= new byte[1000];
                di.read(b);
                String str=new String(b);
                System.out.print(str);
                frm.append(str);

            } catch (IOException e) {
                e.printStackTrace();
            }
        }
       
    }

}

 

 

分享到:
评论

相关推荐

    J2ME的多线程教程和测试

    在Java Micro Edition (J2ME) 平台上,多线程是实现并发执行任务的关键技术。J2ME,作为Java的一个轻量级版本,广泛应用于移动设备和嵌入式系统,其多线程机制允许开发者在有限的资源下优化应用程序性能,提供更好的...

    J2ME里面的线程和网络

    在Java Micro Edition (J2ME)中,线程和网络编程是两个至关重要的概念,尤其对于开发移动设备上的应用程序来说。J2ME为资源有限的设备提供了轻量级的Java平台,因此理解和掌握这两个主题是编写高效、响应式以及能够...

    java手机游戏文档教程

    1. **J2ME线程管理**: 在J2ME中,理解和熟练运用线程是非常关键的。由于资源限制,手机设备需要高效地管理后台和前台任务。文档可能涵盖了线程的创建、同步、通信以及如何避免阻塞,确保游戏运行流畅。 2. **游戏...

    J2ME 小游戏(多线程操作示例)

    在J2ME中,多线程的使用可以实现游戏的流畅运行,例如,一个线程负责游戏的图形渲染,另一个线程则处理用户的输入事件,这样即使在复杂的交互中,游戏画面也不会出现卡顿。 对于新手开发者来说,了解并实践多线程是...

    j2me_plane.rar_j2me_j2me 飞机_j2me 飞机 游戏_飞机游戏

    由于移动设备性能有限,我们需要关注内存管理、减少绘图开销、合理安排线程等,确保游戏运行流畅。 总结来说,通过J2ME开发飞机游戏,开发者需要掌握MIDP和CLDC的基本概念,熟悉Canvas的绘图机制,理解事件处理和...

    J2ME API 2.0 J2ME使用手册 J2ME帮助文档

    - **线程模型**:简化了多线程编程,确保在有限资源下高效运行。 4. **J2ME开发工具** - **KJava编译器**:用于将源代码编译为可执行的字节码。 - **模拟器**:开发者可以在桌面系统上测试应用程序,模拟目标...

    J2ME通用进度条,解决联网、线程操作等候问题

    在Java 2 Micro Edition (J2ME)平台上开发应用程序时,常常会遇到用户需要等待联网操作或线程执行完毕的情况,比如数据下载、文件上传等。这种情况下,为用户提供一个可视化的进度条能够显著提高用户体验,让用户...

    j2me移植Android引擎

    7. **线程管理**:J2ME的线程模型不同于Android,需要适应Android的AsyncTask或Thread/Handler机制。 8. **性能优化**:Android设备性能各异,移植时需注意内存管理和性能优化,避免在Android上出现J2ME中的性能...

    动画线程双缓冲(j2me)

    总结来说,"动画线程双缓冲"是J2ME开发中提高图形性能的重要手段,结合多线程编程和双缓冲技术,能够实现高效且平滑的动画,为用户带来更好的交互体验。通过对提供的源程序进行深入研究,开发者可以进一步提升自己的...

    J2ME面试题J2ME面试题

    Java 2 Micro Edition (J2ME) 是一种Java平台,专为嵌入式设备和移动设备设计,如手机、智能手表、电视盒等。在J2ME面试中,面试官通常会关注候选人的基础理论知识、编程能力、以及对移动应用开发的理解。以下是一些...

    秒表j2me使用多线程,可倒计时及多个计时

    j2me写的秒表程序,使用多线程,对于初学者是一个很好的例子。。。

    j2me游戏.rar

    3. **线程管理**:游戏通常需要独立于用户界面的线程来实现游戏逻辑和动画,以确保流畅性。 4. **资源管理**:考虑到移动设备的内存限制,开发者需要有效地管理图像、音频和其他资源。 四、MIDlet MIDlet是J2ME应用...

    一些实用的j2me模板程序

    音乐的控制,rms的操作类,java字符串解析 将字符串解析成字符数组,java进度条实例模板,j2me中将对象转换成字节数组的方法,j2me联网测试,j2me多线程的应用实例,j2me Socket通信例子 客户端,服务器端

    J2ME开发源码大全

    6. **多线程编程**:J2ME中的线程管理对于实现后台任务和提升用户体验至关重要。 7. **网络服务集成**:如XML解析、SOAP通信,以及与Web服务的交互。 8. **资源管理**:在有限的内存和存储条件下,有效地管理和...

    J2ME相关技术,介绍J2ME的问题处理

    1. J2ME游戏开发人员:专注特定平台的游戏开发,需熟练掌握高级和低级用户界面、线程和网络编程。 2. J2ME应用开发人员:开发移动应用,如定位服务和移动商务,需精通高级用户界面、线程和网络编程。 3. J2ME游戏...

    坦克大战J2ME游戏 多线程的一个列子 可以修改

    坦克大战J2ME游戏 多线程的一个列子

    j2ME_MP3播放器

    **J2ME MP3播放器**是专门为移动设备设计的一款应用程序,主要目标是利用Java Micro Edition(J2ME)技术在手机上实现MP3音乐文件的播放功能。J2ME是一种轻量级的Java平台,广泛应用于移动设备、消费电器等嵌入式...

    J2ME大量源代码,例子

    9. **线程管理**:在J2ME中,多线程用于实现并发执行,特别是在处理网络请求和动画时。源代码可能展示了如何创建和管理线程。 10. **优化技巧**:由于J2ME运行在资源有限的设备上,源代码可能包含内存管理和性能...

    j2me版本的深水炸弹

    在J2ME游戏开发中,为了实现游戏的流畅运行和实时响应,通常需要使用多线程。游戏的主要逻辑和用户输入处理在一个线程上,而图形渲染和其他后台任务则在另一个线程中执行,这样可以确保游戏不会因为某一任务的阻塞...

Global site tag (gtag.js) - Google Analytics