Nokia S60错误查询 For J2ME Developer
* 错误:
游戏运行了比较长一段时间后,无法绘制图片或者抛出OutOfMemoryError,游戏崩溃。
* 可能的原因:
Nokia S60对J2ME的垃圾回收支持不行,它的drawRegion()(MIDP2.0)方法,产生的图片不会被很好的回收,会不停的消耗内存,导致内存溢出,游戏崩溃。
*********************
* 错误:
游戏运行速度异常的慢
* 可能的原因
过于频繁的使用System.gc(),例如,每个循环调用一次(这样会导致机器很慢)。
System.gc()会严重影响程序的运行效率,慎用。
**********************
* 和标准J2ME SDK 不同
S60 的sdk不支持String.equalsIgnoreCase()方法。
--------------------------
项目设置已保存
正在生成 "S60Test"
G:/WTK22/apps/S60Test/src/S60Test.java:23: cannot resolve symbol
symbol : method equalsIgnoreCase (java.lang.String)
location: class java.lang.String
if( s1.equalsIgnoreCase(s2) ){
^
1 error
com.sun.kvem.ktools.ExecutionException
生成失败
------------------------
**********************
* 错误:
播放的声音被截短了。只有音乐的一部分在循环播放。
* 可能的原因
S60手机利用回调实现media.Player,在别的线程中频繁的开关声音,使得Player.start()重新开始的地方被设在音乐中的某个地方,前面的部分“泄漏”了。
有问题的代码:
public void playerUpdate( Player player, String event, Object eventData ){
if( event == PlayerListener.END_OF_MEDIA ){
if( player == bgmPlayer ){
try{
player.start();
}catch(Exception e){}
}
}
}
调整后的代码:
public void playerUpdate( Player player, String event, Object eventData ){
if( event == PlayerListener.END_OF_MEDIA ){
if( player == bgmPlayer ){
try{
player.setMediaTime(0); // 复位start()开始标志
player.start();
}catch(Exception e){}
}
}
}
**********************
* 错误
[Loaded com/ltt/gknight/Gknight]
[Loaded com/ltt/gknight/GknightCanvas]
java.lang.Error: Static initializer: java.lang.NullPointerException, null
- java.lang.Class.throwError(), bci=57
- java.lang.Class.initialize(), bci=221
- java.lang.Class.forName(), bci=0
- com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=43
Uncaught exception: java.lang.RuntimeException: java.lang.Error: Static initializer: java.lang.NullPointerException, null
- com.symbian.midp.runtime.MIDletExecutor$MIDletConstructorThread.run(), bci=183
* 可能的原因
在MIDlet定义static的Form对象的同时实例化对象,例如,
public class Gknight extends MIDlet {
public static Display display = null;
public static GknightCanvas canvas = null;
public Form frm = new Form("P");
public Gknight(){
display = Display.getDisplay(this);
canvas = new GknightCanvas(this,display);
}
protected void startApp() throws MIDletStateChangeException {
if( canvas != null ){
display.setCurrent(canvas);
}
}
protected void pauseApp() {
}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
}
本文总结了在Nokia S60平台上使用J2ME开发时遇到的常见问题及其解决办法,包括内存泄漏、性能下降、声音播放异常及代码编译错误等问题。
1万+

被折叠的 条评论
为什么被折叠?



