Eclipse中的控制台打印顺序

时间:2013-10-28 17:44:28

标签: java eclipse exception eclipse-juno

我在Eclipse中输入了一个简单的算术程序。在Eclipse中运行程序时,每次运行时输出都会以奇怪的顺序出现。有时异常出现在最后的print语句中(这是正确的方法)。有时它会在混乱的顺序中反过来。为什么会这样?&怎么纠正呢?是否有任何设置可以在每次执行时以正确的方式打印。以下屏幕截图显示了它的显示方式。请帮我纠正这个问题。

正确的订单: Correct Order when run

我们在之后运行几次时订单不正确 Incorrect Order

 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);



        }

    }

2 个答案:

答案 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次来电并仍有问题,请尝试从命令提示符运行您的程序,看看是否会产生影响。