Eclipse中的控制台打印顺序

bal*_*208 5 java eclipse exception eclipse-juno

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



        }

    }
Run Code Online (Sandbox Code Playgroud)

rge*_*man 11

这里使用了两种不同的流.您正在使用,System.out.并打印例外System.err.它们是缓冲的,因此一个输出可以在另一个之前打印.

您可以System.out.flush();在例外行之前调用:

System.out.flush();
c = a/b;  //Arthmetic Exception
Run Code Online (Sandbox Code Playgroud)

  • +1。另一种方法是将错误流设置为输出流,如`System.setErr(System.out);` 这样只有一个流需要使用控制台。 (2认同)

cxw*_*cxw 5

更详细一点:print语句的输出结果System.out.但是,异常消息将会发生System.err(请参阅此内容).这两个是分开的输出流,它们都碰巧到了同一个地方:你的控制台.它们是独立缓冲和处理的.在您显示的第二种情况中,print语句缓冲但在异常发生时尚未打印.

编辑这里有一个额外的复杂功能,即Eclipse控制台不是真正的Windows控制台.如前所述这里在其他地方,也有在过去是问题,在Windows平台上的Eclipse控制台,因为Windows不给Eclipse的一个好办法,使其控制台行为就像一个本地控制台.如果您添加了flush调用但仍有问题,请尝试从命令提示符运行您的程序,看看是否有所不同.