站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2ME 专题请问运行J2ME程序,运行完模拟器就关闭了是怎么回事? 谢谢

请问运行J2ME程序,运行完模拟器就关闭了是怎么回事? 谢谢

摘要: 请问运行J2ME程序,运行完模拟器就关闭了是怎么回事? 谢谢


小弟初学J2ME,写了个小程序,运行程序时,模拟器自动关闭是怎么回事?谢谢~~
没有在中文目录下,代码如下:

package com.j2medev.netbeans;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class TurboMidlet extends MIDlet implements CommandListener{

private Display display = null;
private Form mainForm = null;
public static final Command exitCommand = new Command("退出",Command.OK, 1);

//startApp()方法是程序的入口,相当于java应用程序中的main()方法
public void startApp() {
if(display == null){
display = Display.getDisplay(this);
}
mainForm = new Form("TurboMIDlet");
Image img = getImage("JavaPowered-8.png");
mainForm.append(img);
String text = "";
try{
text = getText("j2medev.txt");
}catch(IOException ex){
text = "读取文本出错";
}
mainForm.append("/n"+text);
mainForm.addCommand(exitCommand);
mainForm.setCommandListener(this);
//将mainForm设置为手机屏幕的当前显示对象
display.setCurrent(mainForm);
}

private Image getImage(String name){
Image img = null;
try{
//读取images目录下的图片
img = Image.createImage("/images/"+name);
}catch(IOException ex){
ex.printStackTrace();
}
return img;
}

private String getText(String name) throws IOException{

//将资源文件,例如图片和文本,与java流关联的最好方法
InputStream is = getClass().getResourceAsStream("/text/"+name);
if(is != null){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
//将文本文件的内容写入到baos开辟的内存中
while((ch = is.read()) != -1){
baos.write(ch);
}
//返回文本文件内容的字节数组
byte[] text = baos.toByteArray();
baos.close();
//由于包含中文,所以编码转换为UTF-8
return new String(text,"UTF-8");
}else{
return null;
}

}
public void pauseApp() {
//在本例中不做任何处理
}

public void destroyApp(boolean unconditional) {
//在本例中不做任何处理
}

public void commandAction(Command cmd,Displayable displayable){
if(cmd == exitCommand){
destroyApp(false);
notifyDestroyed();
}
}

}

开发工具NetBeans eclipse也一样,谢谢!!!!



if(display == null){
display = Display.getDisplay(this);
}
这里怎么还要判断啊?是不是这里啊


那就看你的模拟器是什么了啊。有可能是内存的问题,也有可能是图片的问题,太大了。你在外部运行模拟器再看看好不好使!


又看了下你的题目,请问模拟器是在程序运行完关的,还是在程序运行的时候关的啊?


是运行完了就关闭了哈


“那就看你的模拟器是什么了啊。有可能是内存的问题,也有可能是图片的问题,太大了。你在外部运行模拟器再看看好不好使!”是什么意思啊?怎么在外部运行模拟器?谢谢!

还有一些项目也是这样,是书上的代码,把项目导入NetBeans或eclipse后,一运行就是这样,运行完就自动关闭了。


你这个是模拟器自动关闭了吗,看一下程序退出后报了什么错,可能有用。


外部模拟器就是你wtk菜单中的Run MIDP Application选项,可以载入*.jad文件,运行手机程序。


请楼主确认一下是“程序运行完自动关闭”还是“程序压根就没运行直接关闭”。

如果是“程序没有运行直接关闭”,我可能知道是什么原因 *_*


反正是运行时没有报错,弹出了模拟器一秒可能就关了!!!


我QQ:101022104,谢谢大家!!!


“外部模拟器就是你wtk菜单中的Run MIDP Application选项,可以载入*.jad文件,运行手机程序。”只能运行C:/WTK22/apps下的项目阿,把项目拷到这个目录下也不得行哈~~~根本就运行不起!!!


我也遇到过这个问题,只要把C:/WTK22/apps目录下的一个扩展名为.utf的文件删除了就行了


> 反正是运行时没有报错,弹出了模拟器一秒可能就关了!!!

看样子,楼主十有八九是跟我遇到了同样的问题 *_*

我遇到的问题现象也是这样,原因是当运行 MIDlet 的时候,没有通过程序自己退出,而是点击了模拟器的电源按钮,直接把模拟器关了。这样,这个 MIDlet 就残留在模拟器中了。下次运行 MIDlet 的时候,IDE 就会说“模拟器中已经安装了一个同样的 MIDlet”,从而拒绝执行。解决的办法是用 OTA 设置工具进行 MIDlet 卸载。


楼上的老兄,麻烦你可以说详细点怎么卸载吗?


是直接在模拟器中删除吗?我删除了只剩下一个“按装应运程序”了,(这个删不掉),但是还是不行啊~~~~是怎么回事啊?


我用的是 Sun 的 Wireless Toolkit 2.2,在 Windows 2000 下用,通过 OTA Provisioning 启动。应该就是你说的删除方法,最后只剩下“安装应用程序”了。

不过,WTK 带了 4 个模拟器,它们用的文件夹是不同的。你得通过 Default Device Selection 来设置所使用的模拟器,然后再运行 OTA Provisioning。

如果还不行,那恐怕就不是这个原因了 ;p


有工作不顺心的吗?有想换工作的吗?找我,高薪等待:
工作地点:北京
高级JAVA程序,三年以上JAVA开发经验(J2EE、EJB、系统设计和分析)
联系方式:发邮件guagua2008@tom.com,很快有人与你联系


run:
Starting emulator in execution mode
正在通过存储根 DefaultColorPhone 来运行
域名不正确,请切换到 'untrusted'
java.lang.SecurityException: untrusted domain is not configured
at com.sun.midp.security.Permissions.forDomain(+98)
at com.sun.midp.dev.DevMIDletSuiteImpl.create(+39)
at com.sun.midp.dev.DevMIDletSuiteImpl.create(+62)
at com.sun.midp.main.Main.runLocalClass(+20)
at com.sun.midp.main.Main.main(+116)
Execution completed.
15730 bytecodes executed
0 thread switches
738 classes in the system (including system classes)
239 dynamic objects allocated (15592 bytes)
1 garbage collections (0 bytes collected)
生成成功(总时间:4 秒)

这个错是什么原因呢?


谢谢大家,找到原因了, 我的用户名是中文的,就这个原因!!!


↑返回目录
前一篇: 第一次写游戏报错
后一篇: 郁闷:S60模拟器在JB上跑的特别慢,怎么解决?