Eclipse中的控制台打印顺序[重复]

Posted

技术标签:

【中文标题】Eclipse中的控制台打印顺序[重复]【英文标题】:Console Printing Order in Eclipse [duplicate] 【发布时间】:2013-10-28 17:44:28 【问题描述】:

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



        

    

【问题讨论】:

当监视器发表这样的评论时,如果他们发布指向重复项的链接将会很有帮助。 【参考方案1】:

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

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

System.out.flush();
c = a/b;  //Arthmetic Exception

【讨论】:

+1。另一种方法是将错误流设置为输出流,如System.setErr(System.out); 这样只有一个流需要使用控制台。 不幸的是,这并不能可靠地解决问题...【参考方案2】:

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

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

【讨论】:

旁注,与答案无关:如果您想以[description](link) 的形式添加链接,请不要忘记链接中的http:// 之类的协议。或者最好只使用Ctrl+L 选项。这会将http:// 部分添加到您的链接中,并使您的答案更易于稍后编辑。

以上是关于Eclipse中的控制台打印顺序[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse Pydev 控制台和 Idle 中打印 Unicode

eclipse控制台不打印log日志,该怎么解决

eclipse console输出结果顺序不对该怎么办?那个输出结果为啥是红色的?

语句没有在javascript中按顺序运行[重复]

在eclipse中运行wordcount,控制台打印log4j警告

eclipse配置log4j在控制台打印的字体颜色