如何在j2me手机中读取控制台输出? System.out.println()到哪里去了?
为手机编写j2me应用程序时,如果使用仿真器,则使用System.out.println()
在控制台上打印。但是,当代码部署在手机上时,控制台输出会移至何处?
如果无法在未绑定的手机上看到此消息,是否有办法查看手机是否仍通过USB连接到正在部署的PC?
解决方案
我在j2me日志记录中找到了答案的问题。如果没有其他办法,也许可以尝试一下。不过,一种简单的访问System.out.println()的方法会很好。
我唯一可以提供的输入是,这在每个平台上都会有很大的不同。我主要与BlackBerrys一起工作,System.err转到设备事件日志,但我不知道System.out的去向。
简单的答案是:在任何地方都看不到它们。它确实可以在某处进行打印(因为如果有大量打印,电话的加载速度会降低),但是在大多数电话上,都无法访问它。
某些设备确实会显示控制台输出,例如Sony Ericssons,如果捆绑并运行设备上的调试程序,则显示所有输出。我们可以通过搜索各个制造商的开发者网站(如果存在)来找出执行该操作的功能和不执行该操作的功能。
最好的选择是编写一个小的方法,该方法可以追加到程序中的StringBuffer上。然后映射一个按键,该按键将在屏幕上显示StringBuffer的内容。对于搜索那些令人讨厌的设备问题,它是无价的。
我们还应确保在生产代码中不包括println。
我看到有些手机在执行此操作时实际上会发生内存泄漏(例如Sprint上的Sanyo 8400)。
对于J2ME,登录设备始终是一个问题,因为它没有标准的实现。
我可以给我们打电话给GEAR。这是一个J2ME图形框架,还实现了"设备内"调试控制台,我们可以在其中打印行并将其显示在屏幕上。
例如,BlackBerry J2ME设备可以连接到计算机,调试器可以连接到该设备。在实际设备上运行程序后,System.out
OutputStream将进入调试器控制台。
在Symbian手机(诺基亚,索尼爱立信,摩托罗拉,三星,松下,西门子,检查Series60,Series80,Series90或者UIQ平台)上,我们可以同时检索System.out和System.err。最重要的是,我们还可以检索Throwable.printStackTrace()。
Symbian OS的早期版本附带了一个称为重定向器的本机工具。最终,它也可供第三方MIDlet开发人员使用。这些天可能很难找到,但是可以使用插入Java虚拟机使用的C标准库的Symbian实现中的C ++代码进行重新开发。
较新版本的Symbian OS附带了一个添加的GCF协议,该协议允许通过简单地使用System.out,System.err和Throwable.printStackTrace()进行检索。
javax.microedition.io.Connector.openDataInputStream(" redirect://");
从Sun Ltd cldc-hi虚拟机过渡到IBM J9虚拟机期间,我们可能需要在Series60的某些版本上使用" redirect:// test"。
在启动要记录其输出的MIDlet之前,需要先打开连接,因此需要在单独的MIDlet中打开它。
感谢答复QuickRecipesOnSymbian。
在以下文章中,我们可以找到相应的J2ME MIDlet来显示Symbian手机上的标准错误/输出:
http://wiki.forum.nokia.com/index.php/How_to_get_System.out_output_from_a_MIDlet_and_save_it_to_a_file_in_S60_devices
该解决方案在Samsung i8910上也可以正常工作。
(由于我是该站点的新手,因此我无法发布多个链接,因此我们需要在文章末尾找到包含源代码和jar的zip。)