Netbeans 8.1 & Java:抛出错误时输出混乱
Netbeans 8.1 & Java : Messed up output when error is thrown
我注意到一旦抛出错误,Netbeans 就会弄乱整个输出。它使输出看起来像这样一团糟:
Pushing elements onto doubleStack
1.1 2.2 3.3 4.4 5.5 6.6
Exceptions.FullStackException: Stack is full, cannot push 6.6
Popping elements from doubleStack
5.5 4.4 3.3 2.2 1.1
at domein.Stack.push(Stack.java:37)
Pushing elements onto integerStack
at StackApplicatie2.testPush(StackApplicatie2.java:40)
1 2 3 4 5 6 7 8 9 10 11
at StackApplicatie2.testStacks(StackApplicatie2.java:24)
Popping elements from integerStack
at StackApplicatie2.main(StackApplicatie2.java:75)
<etc. …>
而不是人们所期望的:
Pushing elements onto doubleStack
1.1 2.2 3.3 4.4 5.5 6.6
Exceptions.FullStackException: Stack is full, cannot push 6.6
at domein.Stack.push(Stack.java:37)
at StackApplicatie2.testPush(StackApplicatie2.java:40)
at StackApplicatie2.testStacks(StackApplicatie2.java:24)
at StackApplicatie2.main(StackApplicatie2.java:75)
Popping elements from doubleStack
5.5 4.4 3.3 2.2 1.1
Pushing elements onto integerStack
1 2 3 4 5 6 7 8 9 10 11
Popping elements from integerStack
<etc. …>
我只是想知道:Netbeans 8.1 给出如此奇怪的输出是否正常?
当您使用 exception.printStackTrace()
时,堆栈跟踪将打印到 System.err
,您自己的消息将打印到 System.out
(我猜)。两者都是缓冲流,只有当这些流被刷新(达到缓冲区大小、换行等)时,输出才会出现在目的地。
在简单的终端应用程序中,两个流都指向控制台,但是两个流的缓冲具有刷新可以交错的效果,因此两个流的输出可能会混淆。
顺便说一句,这不是 Netbeans 特有的。
如果出于某些原因您真的希望它们按顺序排列,并且不想将异常堆栈跟踪写入错误流,那么您可以使用 exception.printStackTrace(System.out)
。但是请注意,这样做是不寻常的;异常应该是异常的,通常不应该去 'standard output'.
我注意到一旦抛出错误,Netbeans 就会弄乱整个输出。它使输出看起来像这样一团糟:
Pushing elements onto doubleStack
1.1 2.2 3.3 4.4 5.5 6.6
Exceptions.FullStackException: Stack is full, cannot push 6.6
Popping elements from doubleStack
5.5 4.4 3.3 2.2 1.1
at domein.Stack.push(Stack.java:37)
Pushing elements onto integerStack
at StackApplicatie2.testPush(StackApplicatie2.java:40)
1 2 3 4 5 6 7 8 9 10 11
at StackApplicatie2.testStacks(StackApplicatie2.java:24)
Popping elements from integerStack
at StackApplicatie2.main(StackApplicatie2.java:75)
<etc. …>
而不是人们所期望的:
Pushing elements onto doubleStack
1.1 2.2 3.3 4.4 5.5 6.6
Exceptions.FullStackException: Stack is full, cannot push 6.6
at domein.Stack.push(Stack.java:37)
at StackApplicatie2.testPush(StackApplicatie2.java:40)
at StackApplicatie2.testStacks(StackApplicatie2.java:24)
at StackApplicatie2.main(StackApplicatie2.java:75)
Popping elements from doubleStack
5.5 4.4 3.3 2.2 1.1
Pushing elements onto integerStack
1 2 3 4 5 6 7 8 9 10 11
Popping elements from integerStack
<etc. …>
我只是想知道:Netbeans 8.1 给出如此奇怪的输出是否正常?
当您使用 exception.printStackTrace()
时,堆栈跟踪将打印到 System.err
,您自己的消息将打印到 System.out
(我猜)。两者都是缓冲流,只有当这些流被刷新(达到缓冲区大小、换行等)时,输出才会出现在目的地。
在简单的终端应用程序中,两个流都指向控制台,但是两个流的缓冲具有刷新可以交错的效果,因此两个流的输出可能会混淆。
顺便说一句,这不是 Netbeans 特有的。
如果出于某些原因您真的希望它们按顺序排列,并且不想将异常堆栈跟踪写入错误流,那么您可以使用 exception.printStackTrace(System.out)
。但是请注意,这样做是不寻常的;异常应该是异常的,通常不应该去 'standard output'.