我刚刚为 Series 40 平台创建了一个相当简单的 Java ME 应用程序。该应用程序在模拟器中完美运行,但是当我将它打包到我自己的 40 系列手机时,该应用程序失败并显示NullPointerException
. 几乎我所有的代码都处理数组,因此很难判断错误发生在哪里,因为手机的错误报告不包含任何细节。
那么如何在手机上调试应用程序呢?(如果有人能想到应用程序在手机上失败的任何原因,而不是模拟器(我真的很难过)请分享。)
我刚刚为 Series 40 平台创建了一个相当简单的 Java ME 应用程序。该应用程序在模拟器中完美运行,但是当我将它打包到我自己的 40 系列手机时,该应用程序失败并显示NullPointerException
. 几乎我所有的代码都处理数组,因此很难判断错误发生在哪里,因为手机的错误报告不包含任何细节。
那么如何在手机上调试应用程序呢?(如果有人能想到应用程序在手机上失败的任何原因,而不是模拟器(我真的很难过)请分享。)
JavaME 的众多经验法则之一是“永远不要相信模拟器——总是在多个真实设备上进行测试”。
NullPointerExceptions 是最难定位的异常,但并非不可能。通过简单地在设备上输出错误消息,我已经完成了很多次。
String error = null;
Image myImage = null;
try {
myImage = Image.createImage("someImage.png");
} catch (Exception e) {
error = "Failed to load someImage.png: " + e.toString();
}
然后在你的主循环中(对于 Canvas / GameCanvas 的东西),做
if (error!=null) g.drawString(error,0,0,0);
然后开始在你的代码中插入大量的 try/catch 块,无论你在哪里创建对象。
如果上面的 myImage 没有加载,那么你会在尝试加载时得到 NullPointerException
g.drawImage(myImage,0,0,0);
要识别抛出异常的块,您可以将可能的区域包装在 try/catch 中。捕获 NullPointerException 并抛出一个更模糊的异常,这将帮助您缩小范围。所以可以抛出 ArithmeticException 等。