我在Eclipse中输入了一个简单的算术程序。在Eclipse中运行程序时,每次运行时输出都会以奇怪的顺序出现。有时异常出现在最后的print语句中(这是正确的方法)。有时它会在混乱的顺序中反过来。为什么会这样?&怎么纠正呢?是否有任何设置可以在每次执行时以正确的方式打印。以下屏幕截图显示了它的显示方式。请帮我纠正这个问题。
正确的订单:
我们在之后运行几次时订单不正确
package com;
public class Abc {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("begin main");
// TODO Auto-generated method stub
int a = 10;
int b = 0;
int c = 0;
System.out.println("value of a BD is " + a);
System.out.println("value of b BD is " + b);
System.out.println("value of c BD is " + c);
c = a/b; //Arthmetic Exception
System.out.println("value of a AD is " + a);
System.out.println("value of b AD is " + b);
System.out.println("value of c AD is " + c);
}
}
答案 0 :(得分:11)
这里使用了两种不同的流。您使用的是System.out.
,例外情况会打印为System.err
。它们是缓冲的,因此一个输出可以在另一个之前打印。
您可以在例外行前致电System.out.flush();
:
System.out.flush();
c = a/b; //Arthmetic Exception
答案 1 :(得分:5)
更详细一点:print语句的输出将转到System.out
。但是,异常消息将转到System.err
(请参阅this)。这两个是分开的输出流,它们都碰巧到了同一个地方:你的控制台。它们是独立缓冲和处理的。在您显示的第二种情况中,print
语句正在缓冲但在异常发生时尚未打印。
编辑这里有一个额外的复杂功能,即Eclipse控制台不是真正的Windows控制台。正如其他地方所指出的here,过去在Windows平台上存在Eclipse控制台的问题,因为Windows并没有为Eclipse提供一种使其控制台像本机控制台一样运行的好方法。如果您添加flush
次来电并仍有问题,请尝试从命令提示符运行您的程序,看看是否会产生影响。