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();
}
}
}
}
分享到:
相关推荐
在Java Micro Edition (J2ME) 平台上,多线程是实现并发执行任务的关键技术。J2ME,作为Java的一个轻量级版本,广泛应用于移动设备和嵌入式系统,其多线程机制允许开发者在有限的资源下优化应用程序性能,提供更好的...
在Java Micro Edition (J2ME)中,线程和网络编程是两个至关重要的概念,尤其对于开发移动设备上的应用程序来说。J2ME为资源有限的设备提供了轻量级的Java平台,因此理解和掌握这两个主题是编写高效、响应式以及能够...
1. **J2ME线程管理**: 在J2ME中,理解和熟练运用线程是非常关键的。由于资源限制,手机设备需要高效地管理后台和前台任务。文档可能涵盖了线程的创建、同步、通信以及如何避免阻塞,确保游戏运行流畅。 2. **游戏...
在J2ME中,多线程的使用可以实现游戏的流畅运行,例如,一个线程负责游戏的图形渲染,另一个线程则处理用户的输入事件,这样即使在复杂的交互中,游戏画面也不会出现卡顿。 对于新手开发者来说,了解并实践多线程是...
由于移动设备性能有限,我们需要关注内存管理、减少绘图开销、合理安排线程等,确保游戏运行流畅。 总结来说,通过J2ME开发飞机游戏,开发者需要掌握MIDP和CLDC的基本概念,熟悉Canvas的绘图机制,理解事件处理和...
- **线程模型**:简化了多线程编程,确保在有限资源下高效运行。 4. **J2ME开发工具** - **KJava编译器**:用于将源代码编译为可执行的字节码。 - **模拟器**:开发者可以在桌面系统上测试应用程序,模拟目标...
在Java 2 Micro Edition (J2ME)平台上开发应用程序时,常常会遇到用户需要等待联网操作或线程执行完毕的情况,比如数据下载、文件上传等。这种情况下,为用户提供一个可视化的进度条能够显著提高用户体验,让用户...
7. **线程管理**:J2ME的线程模型不同于Android,需要适应Android的AsyncTask或Thread/Handler机制。 8. **性能优化**:Android设备性能各异,移植时需注意内存管理和性能优化,避免在Android上出现J2ME中的性能...
总结来说,"动画线程双缓冲"是J2ME开发中提高图形性能的重要手段,结合多线程编程和双缓冲技术,能够实现高效且平滑的动画,为用户带来更好的交互体验。通过对提供的源程序进行深入研究,开发者可以进一步提升自己的...
j2me写的秒表程序,使用多线程,对于初学者是一个很好的例子。。。
3. **线程管理**:游戏通常需要独立于用户界面的线程来实现游戏逻辑和动画,以确保流畅性。 4. **资源管理**:考虑到移动设备的内存限制,开发者需要有效地管理图像、音频和其他资源。 四、MIDlet MIDlet是J2ME应用...
音乐的控制,rms的操作类,java字符串解析 将字符串解析成字符数组,java进度条实例模板,j2me中将对象转换成字节数组的方法,j2me联网测试,j2me多线程的应用实例,j2me Socket通信例子 客户端,服务器端
6. **多线程编程**:J2ME中的线程管理对于实现后台任务和提升用户体验至关重要。 7. **网络服务集成**:如XML解析、SOAP通信,以及与Web服务的交互。 8. **资源管理**:在有限的内存和存储条件下,有效地管理和...
1. J2ME游戏开发人员:专注特定平台的游戏开发,需熟练掌握高级和低级用户界面、线程和网络编程。 2. J2ME应用开发人员:开发移动应用,如定位服务和移动商务,需精通高级用户界面、线程和网络编程。 3. J2ME游戏...
坦克大战J2ME游戏 多线程的一个列子
**J2ME MP3播放器**是专门为移动设备设计的一款应用程序,主要目标是利用Java Micro Edition(J2ME)技术在手机上实现MP3音乐文件的播放功能。J2ME是一种轻量级的Java平台,广泛应用于移动设备、消费电器等嵌入式...
9. **线程管理**:在J2ME中,多线程用于实现并发执行,特别是在处理网络请求和动画时。源代码可能展示了如何创建和管理线程。 10. **优化技巧**:由于J2ME运行在资源有限的设备上,源代码可能包含内存管理和性能...
在J2ME游戏开发中,为了实现游戏的流畅运行和实时响应,通常需要使用多线程。游戏的主要逻辑和用户输入处理在一个线程上,而图形渲染和其他后台任务则在另一个线程中执行,这样可以确保游戏不会因为某一任务的阻塞...
同时,J2ME应用通常使用KVM(K Virtual Machine)运行,需要注意内存管理和线程控制。 4. **MIDP组件** MIDP是J2ME中用于开发用户界面的主要框架,包含了Canvas和Form两种基本组件。Canvas允许自定义绘图,适合...