English 中文(简体)
如何在j2me手机中读取控制台输出?System.out.println()去哪里了?
原标题:
  • 时间:2008-09-24 13:05:14
  •  标签:

当为手机编写j2me应用程序时,如果使用模拟器,则使用System.out.println()在控制台上打印。然而,当代码部署在手机上时,控制台的输出会去哪里?

如果不可能在未连接的手机中看到这一点,那么如果手机仍通过USB连接到正在部署的PC,有办法看到吗?

问题回答

在Symbian手机上(诺基亚、索尼爱立信、摩托罗拉、三星、松下、西门子,检查60系列、80系列、90系列或UIQ平台),您可以检索System.out和System.err。最重要的是,您还可以检索Throwable.printStackTrace()。

Symbian操作系统的早期版本附带了一个名为Redirector的本地工具。它最终也可供第三方MIDlet开发人员使用。现在可能很难找到它,但可以使用C++代码重新开发,这些代码插入Java虚拟机使用的C标准库的Symbian实现中。

Symbian操作系统的新版本附带了一个额外的GCF协议,该协议允许通过简单地使用

<code>javax.microedition.io.Connector.openDataInputStream(“redirect://”)

您可能需要使用“redirect://test“在从Sun Ltd cldc-hi虚拟机过渡到IBM J9虚拟机期间,在Series60的某些版本上。

在启动要记录其输出的MIDlet之前,需要打开连接,因此需要在单独的MIDlet中打开它。

我发现这个问题关于j2me日志记录的答案。如果其他方法都不起作用,也许可以尝试一下。不过,访问System.out.println()的简单方法会很好。

感谢您对Symbian上QuickRecipes的回应。

在下面的文章中,您可以找到相应的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

The solution works fine on Samsung i8910 as well. (As I m a newbie on this site, I could not post more than one links, so you need to find the zip with the sources and the jar at the end of the article.)

简单的答案是:在任何地方你都看不到它们。它确实在某个地方打印(因为如果你有大量的打印,大量的手机会变慢),但在大多数手机上,无法访问它。

有些设备确实会显示控制台输出,例如Sony Ericssons,如果连接并运行设备调试程序,则会显示所有输出。你可以通过搜索各种制造商的开发者网站(如果有的话)来找出哪些做了,哪些不做。

最好的办法是编写一个小方法,将其附加到程序中的StringBuffer中。然后映射一个按键,该按键将在屏幕上显示StringBuffer的内容。它对于搜索那些令人讨厌的设备问题是非常宝贵的。

我能提供的唯一意见是,这在每个平台上都会有很大的不同。我主要使用黑莓手机,System.err会进入设备事件日志,但我不知道System.out会去哪里。

您还应该确保不要在生产代码中包含println。

我见过一些手机在这样做的时候内存泄漏(例如Sprint上的三洋8400。

Logging on devices is always a problem with J2ME because there s not a standard implementation for it. I can address you to GEAR. It s a J2ME graphic framework that implements also a "in-device" debug console where you can print your lines and display them on your screen.

例如,BlackBerry J2ME设备可以连接到计算机,调试器可以连接到该设备。在实际设备上运行程序后,System.outOutputStream将转到调试器控制台。





相关问题
热门标签