Netbeans 8.1& Java:抛出错误时搞砸了输出

时间:2016-10-11 14:04:55

标签: java netbeans netbeans-8.1

我注意到一旦出现错误,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而言,这是否正常给出如此奇怪的输出?

1 个答案:

答案 0 :(得分:0)

当您使用exception.printStackTrace()时,堆栈跟踪将打印到System.err,您自己的消息将打印到System.out(我猜)。两者都是缓冲流,只有当刷新这些流(达到缓冲区大小,换行符等)时,输出才会出现在目的地。

在一个简单的终端应用程序中,两个流都指向控制台,但是两个流的缓冲都会导致刷新交错,因此两个流的输出可能会混淆。

这,顺便说一下,并不是Netbeans特有的。

如果由于某些原因你真的想要它们,并且不想将异常堆栈跟踪写入错误流,那么你可以使用exception.printStackTrace(System.out)。但要注意这样做是不寻常的;例外应该是例外的,通常不应该转到“标准输出”。