繁体   English   中英

System.out.println无法正常运行

[英]System.out.println not functioning

在什么情况下,java的System.out.println将无法生成任何输出。 我在一个方法内部调用它,有时当调用该方法时,我得到println,而不是我得到的othertimes。

更新:我也在println之后使用System.out.flush()。

更新:感谢您的调试帮助。 事实证明,打开一个对话框的阻塞调用使输出显示出正常的顺序。 我认为当对话框关闭时,我正在尝试打印消息的方法被调用,但方法本身就是调用对话框的内容,因此在关闭之后它已经超过打印输出,这是我开始寻找测试的地方。 如果某人有能力删除此问题,因为问题不是最初提出的问题,我们将不胜感激。

我以前从未见过这种情况。 从理论上讲,当输出不在你预期的位置时,它只会“失败”。 输出目标可以使用System#setOut()进行更改。

某些平台上的System.out.println使用缓冲输出。 根据您的代码执行的操作,可能在程序退出之前不刷新缓冲区。 尝试在println之后放入System.out.flush()并查看是否有帮助。

编辑:

有时当调用该方法时,我会得到println,而不是我得到的othertimes

你如何验证方法被调用但println没有产生输出? 您的方法是否有可能在它到达println之前抛出异常(然后被吞下)?

当然,看到一些实际的代码会非常有帮助。

你在哪里检查输出? System.out可能已被重定向到其他地方,所以也许你正在寻找错误的地方。

根据@ BalusC的建议回答 -

感谢您的调试帮助。 事实证明,打开一个对话框的阻塞调用使输出显示出正常的顺序。 我认为当对话框关闭时我正在尝试打印消息的方法被调用,但方法本身就是调用对话框的内容,因此在关闭之后它已经通过打印输出,这是我开始寻找测试的地方。 如果某人有能力删除此问题,因为问题不是最初提出的问题,我们将不胜感激。

System.out.println是缓冲输出,如果你不刷新缓冲区,它可能似乎“等待”直到程序结束。 有时,程序可能会在刷新缓冲区之前死亡。 System.out.flush()将强制刷新输出。

文件句柄可能已更改。 即, stdout的文件描述符不再是1 我已经在日志记录实用程序中看到了这一点,人们不想去捕获任何可能打印到文件描述符的文本,因此他们只是将流重定向到打开文件的文件句柄。

这是python中的一个例子:

import sys

h = open(r"C:\foo.txt","a+")

sys.stdout = h
sys.stdout.write("hey fellas")

h.close()

在cmdline上运行它,你不会像你期望的那样打印出“嘿fellas”。 相反,它将被重定向到文件C:\\ foo.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM