6

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



        }

    }
4

2 回答 2

12

这里使用了两种不同的流。您正在使用System.out.并且异常打印为System.err. 它们是缓冲的,因此一个输出可能会在另一个输出之前打印。

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

System.out.flush();
c = a/b;  //Arthmetic Exception
于 2013-10-28T17:48:16.000 回答
5

更详细一点:打印语句的输出将变为System.out. 但是,异常消息将发送到System.err(请参阅this)。这两个是单独的输出流,它们恰好都去同一个地方:你的控制台。它们被独立缓冲和处理。在您展示的第二种情况下,print当异常发生时,语句正在缓冲但尚未打印。

编辑这里还有一个复杂的地方,那就是 Eclipse 控制台不是真正的 Windows 控制台。正如这里以及其他地方所指出的,过去在 Windows 平台上的 Eclipse 控制台存在问题,因为 Windows 没有为 Eclipse 提供一种使其控制台像本机控制台一样工作的好方法。如果您添加flush呼叫但仍然有问题,请尝试从命令提示符运行您的程序,看看是否有所不同。

于 2013-10-28T17:49:29.313 回答