wtk的工具使用eclipseme+eclipse非常方便,但是我们必需熟悉一些常用的命令行操作,以便在开发过程中出现问题时可以排除错误.例如,我今天在用wtk的模拟器通过OAT方式运行程序时,就出现了如下错误:
Warning: Running JAM, Ignoring all other options (but "-Xheapsize", and OTA flags if provided)
正在通过存储根 QwertyDevice 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
** Error installing suite (39): The JAD matches a version of a suite already installed.
Execution completed.
3653833 bytecodes executed
24 thread switches
1665 classes in the system (including system classes)
19019 dynamic objects allocated (571732 bytes)
1 garbage collections (0 bytes collected)
然后模拟器就退出了,大家注意有一行:
** Error installing suite (39): The JAD matches a version of a suite already installed.
提示相同版本的jad已经安装了,好,那改一个版本吧,修改后运行依然出错:
** Error installing suite (17): The application is an older version of one that is already installed
可见,错误很明显:因为此应用已经安装过了,使用如下命令查看安装了哪些应用:
D:\WTK2.5.1\apps\test>emulator -Xjam:list
正在通过存储根 DefaultColorPhone 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
[1]
Name: myjm Midlet Suite
Vendor: Midlet Suite Vendor
Version: 2.0.0
Storage name: #Midlet%0020#Suite%0020#Vendor_myjm%0020#Midlet%0020#Suite_
Size: 8K
Installed From: http://localhost:8080/ota/myjm/j2me.jad
MIDlets:
HelloWorldPlusMIDlet
MyTestMIDlet
CalendarTest
[2]
Name: test
Vendor: Unknown
Version: 1.0
Description:this is my test Midlets
Storage name: #Unknown_test_
Size: 6K
Installed From: http://10.17.33.191:1260/test/bin/test.jad
MIDlets:
TinyMIDlet
HelloWorldPlusMIDlet
既然这样,那换一个名称吧,OK了,运行成功!
原因找到了,那我们就可以将原来的程序删除后再安装,命令如下:
D:\WTK2.5.1\apps\test>emulator -Xjam:remove=all
正在通过存储根 DefaultColorPhone 来运行
Running with locale: Chinese_People's Republic of China.936
Running in the identified_third_party security domain
Execution completed.
3693460 bytecodes executed
22 thread switches
1665 classes in the system (including system classes)
19407 dynamic objects allocated (583992 bytes)
1 garbage collections (0 bytes collected)
也可以用安装的序号删除指定的程序,如:
D:\WTK2.5.1\apps\test>emulator -Xjam:remove=1
其实,删除还可以直接在模拟器上完成,运行下 emulator -Xjam 看看就知道了.
实际上我们如果只是测试下程序,可使用这个参数,在运行后程序将会自动删除:
emulator -Xjam:transient=http://localhost:8080/ota/myjm/j2me.jad
另外,提醒大家一下,通过OAT下载的时候一定要将httpserver的MIME类型设置正确,不然模拟器会提示MIME类型不正确,正确的MIMI类型应该如下:
<mime-mapping>
<extension>jad</extension>
<mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jar</extension>
<mime-type>application/java-archive</mime-type>
</mime-mapping>
在运行程序时,无论是直接运行JAD,还是OAT方式,都需要将midp和midlet的版本设置正确,查看模拟器支持的版本命令如下:
D:\WTK2.5.1\apps\test>emulator -version
Sun Java(TM) Wireless Toolkit 2.5.1 for CLDC
Profile: MIDP-2.1
Configuration: CLDC-1.1
Optional: J2ME-WS-1.0,J2ME-XMLRPC-1.0,JSR179-1.0.1,JSR180-1.0.1,JSR184-1.1,JSR211-1.0,JSR226-1.0,JSR229-1.1.0,JSR234-1.0
,JSR238-1.0,JSR239-1.0,JSR75-1.0,JSR82-1.1,MMAPI-1.1,SATSA-APDU-1.0,SATSA-CRYPTO-1.0,SATSA-JCRMI-1.0,SATSA-PKI-1.0,WMA-1
.1,WMA-2.0
以上命令主要针对sun的WTK,对于其它厂商的SDK,命令格式应该类似.
=============================================================
下面着重对NOKIA的s60sdk3的常见问题进行一下讨论.
在eclipseme中使用s60的sdk作为模拟器运行OAT方式时,会提示:
Failed to resolve application name
Caught exception:
java.lang.IllegalStateException:No application specified in Jad or command line
...
可见,s60的sdk是不支持OAT方式运行的.即s60的emulator不支持-Xjam参数(参见安装目录的S60_SDK_User_Guide_v3.0a.pdf),只支持-Xdescriptor:<jad file name>
-------------------------------------------
通过jad的方式运行吧,在eclipse提示:
java.io.FileNotFoundException
...
原来是sdk不支持这个格式的文件参数:file:\E:\,在eclispe的run配置中将"file:"去掉后可运行成功,同样在命令行下也可运行成功:
emulator -Xdescriptor:E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\j2me.jad
(注意:此方式运行时有可能会出现以下错误:
Failed to launch the emulator:
Caught exception:
java.lang.RuntimeException:command failed with Symbian error code:-10508
at com.symbian.tools.j2me.sei.emulator...
...
),将jad的MIDP版本修改为模拟器支持的版本(emulator -version查看)可解决该问题.
然后直接以class的方式运行jar中的类,在eclipse中提示:
Jar file could not be initialized
Caught exception:
java.til.zip.ZipException:invalid entry compressed size(expected 993 but got 996 bytes)
...
用以下命令行出现同样的错误:
E:\sylilzy\silyWork\mgs>emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\myjm.jar com.sily.s60.HelloWorldPlusMIDlet
可见eclipse的classs运行应该就是采用上述命令行
分析原因,可能是因为eclipse所打的jar包,在sdk中无法被解压导致,但是为什么采用jad方式运行时可以正确读取jar包中的类呢,无可得知...
但是,在eclipse中create package后,再create obfuscated package后,再通过命令行运行:
emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\deployed\myjm.jar com.sily.s60.HelloWorldPlusMIDlet
则是OK的,是因为proguard3.9对原myjm.jar包作了修改,反而可以正常运行了 : )
--------------------------------------------------
那现在直接运行class目录中的class会怎样呢,如下:
E:\sylilzy\silyWork\mgs>emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\bin com.sily.s60.HelloWorldPlusMIDlet
java.lang.Error: ClassFormatError: Inconsistent or missing stackmap at target
- java.lang.Class.invoke_verify(), bci=0
- java.lang.Class.initialize(), bci=117
- java.lang.Class.forName(), bci=0
- com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=43
Uncaught exception: java.lang.RuntimeException: java.lang.Error: ClassFormatError: Inconsistent or missing stackmap at t
arget
- com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=183
-VM verbose connection exited
提示ClassFormatError,这是由于编译的class没有preverify导致的,换SUN WTK编译试试,一样.但是,运行另外一个程序却可以通过:
emulator -classpath E:\sylilzy\silyWork\eclipse32workspace\myjm\bin com.sily.j2me.MyTestMIDlet
the program is running...
-VM verbose connection exited
其实这说明有些类在preverify的时候并没有改变
---------------------------------------
另外,对于s60的模拟器,启动后可不关闭,因为在模拟器上有一个叫做"DebugAgent"的程序专门是用来调试的,这样可在调试时节约启动模拟器的时间.
------------------------------------------------------
综上所述,可见nokia的sdk在与eclipseme的兼容上还存在一些问题,也就是说在 eclipse3.2+eclipseme1.7+nS60_jme_sdk_3rd_e的环境下,想在eclipse下正常运行midlet程序是不可能的,需要手工修改一些配置,或者通过命令行的方式才可将程序正确地运行起来.
转自:http://ming-fanglin.iteye.com/blog/548873
分享到:
相关推荐
常见的J2ME模拟器有Wireless Toolkit (WTK)和Nokia S60 SDK。WTK是一个通用的J2ME模拟器,适用于大多数设备,推荐使用WTK2.5.2版本,因为它相对新且功能齐全。如果你专注于特定平台,如Nokia手机,可以考虑使用nS60_...
本篇文章将详细讲解J2ME开发环境的配置过程,包括必要的工具、步骤以及常见问题的解决。 1. **选择开发工具** - **Java SDK**: 开发J2ME应用的基础是Java Development Kit (SDK),你需要下载并安装对应版本的Java ...
3. 使用WTK的IDE(通常是Eclipse或NetBeans,也可以直接使用命令行工具)创建新的J2ME项目。 4. 编写源代码,利用MIDP和CLDC API实现游戏逻辑。 5. 使用WTK的编译器将源代码编译为JAR文件。 6. 创建JAD文件,这是...
此外,Sun Microsystems(现为Oracle)提供的KToolbar是一个常用的命令行工具,用于编译和打包J2ME应用。 **J2ME项目流程** 创建J2ME项目通常包括以下步骤: 1. **设置项目**: 选择合适的配置和配置文件。 2. **...
#### 三、常见问题及解决方案 ##### 1. 无法混淆的问题 - 解决方法:下载proguard.jar文件并将其放置于WTK的bin文件夹中。 - 注意事项:虽然此问题不影响学习进程,但建议了解如何解决,以便在未来项目中使用。 #...
3. **bin**:这个目录通常包含可执行文件和脚本,如WTK的命令行工具和模拟器。 4. **wtklib**:这是WTK的库文件目录,包含了开发J2ME应用所需的类库和资源,例如MIDP(Mobile Information Device Profile)和CLDC...
6. **源码查看与调试**: 使用反编译工具,开发者可以查看库函数的实现,帮助解决集成问题,或者在没有源代码的情况下进行调试。这对于学习和理解第三方库的工作原理尤其有帮助。 7. **代码保护与反反编译**: 有些...
【Java常见问题及答案】 Java是一种广泛使用的编程语言,以其跨平台、面向对象、并发性和类型安全性而闻名。Java的版本历史包括Java 1.0、1.1、2.0(从JDK 1.2开始被称为Java 2),以及后续的1.3、1.4等。JDK(Java...
4. **设置Path变量**: 将JDK和J2ME SDK的bin目录添加到系统的PATH环境变量中,这样你就可以在命令行中直接运行它们的工具。 5. **创建项目**: 使用J2ME SDK中的工具,如MIDlet Suite Wizard,创建一个新的J2ME项目...
- **错误调试与性能优化**:提供调试技巧和性能优化建议,帮助开发者解决常见问题并提升应用性能。 对于J2ME开发者来说,熟悉WTK9库函数是提高开发效率的关键。通过深入学习《wtk9库函数大全》,开发者可以更好地...
本文将深入探讨几种常见的Java开发工具,包括SUN公司的JDK、Java Workshop和NetBeans,以及后来的Sun Java Studio,帮助开发者了解它们的特点和适用场景。 1. **SUN公司的JDK (Java Development Kit)** JDK是Java...
4. **编译和运行**:使用WTK的命令行工具或集成开发环境(IDE,如Eclipse或NetBeans)进行编译。编译成功后,可以在模拟器或真实设备上运行应用程序。 以下是简化的代码示例: ```java import javax.microedition....
以下是对几种常见Java开发工具的详细介绍: 1. **SUN公司的JDK(Java Development Kit)** JDK是Java开发的基础,由SUN公司提供,包含Java编译器(javac)和Java运行环境。它允许开发者使用任意文本编辑器编写Java...
这个工具集为开发者提供了在J2ME平台上构建、测试和调试移动应用的全套解决方案。Eclipse ME支持多种J2ME配置和Profile,包括CLDC(Connected Limited Device Configuration)和MIDP(Mobile Information Device ...
在Java编程领域,有许多基础和核心的概念需要理解。以下是一些关键知识点的详细解释: 1. **Java、Java2、JDK**: ...随着经验的增长,你将逐渐熟悉这些概念,并能熟练地运用它们来解决实际问题。
### Java新手入门必看的30个问题详解 #### 一、基础知识篇 **1....** - **Java**:是一种通用的、并发的、强...以上是针对Java新手入门阶段的一些常见问题及解答,希望能帮助初学者更好地理解和掌握Java的基础知识。
在智能手机和平板设备中,内存卡(也称为SD卡或microSD卡)是存储数据、...如果以上方法均无法解决问题,可能需要寻求专业数据恢复服务。记住,预防总是优于治疗,定期维护和合理使用内存卡能显著降低出现故障的概率。
标题“midp_debuging-4801.zip”和描述中的信息表明,这是一个与 MIDP(Mobile Information Device Profile)...学习和掌握这些内容,能够帮助开发者有效地定位和解决问题,提升开发效率,保证应用的质量和用户体验。
3. **J2ME(Java 2 Platform Micro Edition)**,为嵌入式设备和电子消费产品提供解决方案,常见于移动电话和智能设备。 在学习Java的过程中,理解并掌握基础的命令行操作是必要的。例如,`dir`命令用于列出当前...