2012-04-12 50 views
0

我正在使用NetBeans IDE的Java,我试图调试到输出窗口。我的日志以运行顺序打印到输出窗口,但例外情况除外,这些例外情况往往会在代码运行前先打印出来。这里是输出的一个例子 -Java调试 - 并发异常

19:45:53.266:检查我们是否过去的起点 19:45:53.267:SortRequestIdList中的错误。异常= [Ljava.lang.Object;不能转换为[Ljava.lang.String; 19:45:53.266:我们已经过了起点。查看我们的位置相对于界限 19:45:53.266:我们低于下限。关于运行RunnerBelow 19:45:53.267:ListLex中出现错误。异常= NULL 19:45:53.266:* 进入RunnerBelow *

所以例外打印 '提前'。有什么方法可以控制何时打印(事件A在事件B之前运行)=>(A的调试输出出现在事件B之前)?

感谢您提供的任何帮助!

克里斯

回答

1

printStackTrace使用System.err,而对于所有其他输出,你可能使用System.out。在代码中使用System.err.println(简单解决方案),或者创建一个方法来接受异常并将其堆栈跟踪打印到System.out(相当困难)。

2

异常通常使用System.err打印,而普通的调试消息将写入System.out。由于使用两个不同的流来创建输出,有时您会在异常之前发生任何调试消息之前看到写入异常。

如果您可以更改生成消息的代码,我会建议将输出添加到您的catch块中的System.out。 (你可以使用System.out.println(e.getMessage()))。如果这不可行,您可以将相关的调试消息打印到System.err。

+0

啊,谢谢,是有道理的。我可以删除System.err的用途,但它们很有用,因为它们以红色突出显示我的输出,而其他所有内容都是黑色的。有没有办法选择输出文本颜色?谢谢! - 添加:我将与http://www.diogonunes.com/it/work/jcdp/一起玩) – 2012-04-12 09:39:22

+0

JCDP看起来很有前途,从未听说过。虽然我不确定它是否可以与NetBeans控制台一起使用。除此之外,System.err输出的着色是由IDE完成的,我没有使用NetBeans的经验,所以我不知道是否可以更改输出的颜色,但是您可能需要查看属性那里。 – pushy 2012-04-12 10:43:26

+0

PS - 对于任何人都希望得到这个工作:JCDP站点在下载中提供最新的JANSI jar文件,但是JANSI开发者已经改变了这些方法,使得它们与JCDP不兼容。如果你想使用JCDP,那么可以到http://jansi.fusesource.org/download.html并下载JANSI的早期版本(我刚刚尝试过1.0,它的工作原理) – 2012-04-13 11:02:23