java的System.out.println无法生成任何输出的情况有哪些。我在一个方法中调用它,有时当调用该方法时,我得到println,而不是我没有。
更新:我也在println之后使用System.out.flush()。
更新:感谢您的调试帮助。事实证明,打开一个对话框的阻塞调用使输出显示出正常的顺序。我认为当对话框关闭时,我正在尝试打印消息的方法被调用,但方法本身就是调用对话框的内容,因此在关闭之后它已经超过打印输出,这是我开始寻找测试的地方。如果某人有能力删除此问题,因为问题不是最初提出的问题,我们将不胜感激。
答案 0 :(得分:4)
我之前从未见过这种情况。从理论上讲,当输出不在你预期的位置时,它只会“失败”。可以使用System#setOut()
更改输出目标。
答案 1 :(得分:4)
System.out.println
使用缓冲输出。根据您的代码执行的操作,可能在程序退出之前不刷新缓冲区。尝试在System.out.flush()
之后添加println
,看看是否有帮助。
修改:
有时当调用该方法时,我会得到println和其他的
如何验证方法是否被调用但println没有产生输出?您的方法是否有可能在它到达println之前抛出异常(然后被吞下)?
当然,看到一些实际的代码会非常有帮助。
答案 2 :(得分:2)
你在哪里检查输出?有可能System.out
被重定向到其他地方,所以也许你看错了地方。
答案 3 :(得分:1)
感谢您的调试帮助。事实证明,打开一个对话框的阻塞调用使输出显示出正常的顺序。我认为当对话框关闭时,我正在尝试打印消息的方法被调用,但方法本身就是调用对话框的内容,所以在关闭之后它已经通过打印输出,这是我开始寻找测试的地方。如果某人有能力删除此问题,因为问题不是最初提出的问题,我们将不胜感激。
答案 4 :(得分:0)
System.out.println是缓冲输出,如果你不刷新缓冲区,它可能似乎“等待”直到程序结束。有时,程序可能会在刷新缓冲区之前死亡。 System.out.flush()将强制刷新输出。
答案 5 :(得分:0)
文件句柄可能已更改。即,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