Java - 错误消息显示不正确

标签 java eclipse error-handling output

这不是什么大问题,但我不明白为什么会这样,所以我想我应该把它贴在这里。这是我的代码:

do{
    printMenu();//method to print menu
    try{
        user=input.nextInt();
    }
    catch(InputMismatchException imme)
    {
        System.err.println("Make sure to enter a number.");
        input.next();
        continue;
    }
    switchMenu(user);//method with switch method for user input
}while(1<2);

除一件事外,代码运行良好。错误消息确保输入数字。有时显示在菜单之后,有时显示在菜单之前,有时显示在菜单中间。 这是程序的输出:

1. Book a ticket
2. Cancel a ticket
3. Check how many seats left
4. Print seat map
5. Check price
6. Print ticket
7. Exit

a

1. Book a ticket
2. Cancel a ticket
3. Check how many seats left
4. Print seat map
5. Check price
6. Print ticket
7. Exit

Make sure to enter a number.//Error message after menu

asd//wrong input

Make sure to enter a number.//now error message displays before menu

1. Book a ticket
2. Cancel a ticket
3. Check how many seats left
4. Print seat map
5. Check price
6. Print ticket
7. Exit

asd

1. Book a ticket
2. Cancel a ticket
3. Check how many seats left
Make sure to enter a number.//in the middle now???
4. Print seat map
5. Check price
6. Print ticket
7. Exit

如果重要的话,我正在使用 Eclipse。 我知道这不是什么大问题,但我很好奇为什么会这样。

最佳答案

这是因为 System.outSystem.err 是两个不同的流,它们可能会缓冲写入操作并在不同的时间刷新(即打印出来)次。

System.outSystem.err 之间的事情可能会混淆,因为我假设 System.out 是使用出于性能原因的缓冲输​​出流和 System.err 将使用非缓冲流实现以更快地打印错误消息。

当您在流上显式调用 flush() 时,您可能会观察到更接近您期望的行为,尽管我不确定是否不会留下竞争条件,因为两者将在同一个 Eclipse 控制台中结束。

也就是说,我还假设 Eclipse 控制台有混合字符串的方法(即,即使您的代码保证顺序,控制台也可能给予 System.err 更高的优先级) ,因此获得保证顺序的唯一可靠方法是恕我直言,对两条消息使用相同的输出流。

关于Java - 错误消息显示不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29859455/

相关文章:

java - JBOSS 6.2 - 新的缺失/不满足的依赖项(对于 mysql 驱动程序)

java - 在我的生产系统中,每两天在 Tomcat 7 中运行我的 Web 应用程序 tomcat 已自动停止

java - 如何在 eclipse e4 中将值从一个 View 发送到另一 View ?

android - 防止 LogCat session 过滤器窃取焦点

java - 在运行时设置 JVM 参数

android - Android New文物跟踪非网络错误

JAVA 8 升级,仅 mvn clean install 测试失败,有什么想法吗?

java - 如何使用贝塞尔曲线操纵端点角度

javascript - 在使用angular,angularjs和jQuery技术构建的应用程序中,处理客户端全局错误的最佳和最佳方法是什么?

powershell - 文件外没有写入错误,只有成功