Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java System.out.println不工作_Java_Blocking_Println - Fatal编程技术网

Java System.out.println不工作

Java System.out.println不工作,java,blocking,println,Java,Blocking,Println,java的System.out.println在哪些情况下无法生成任何输出。我在一个方法中调用了它,有时调用该方法时,我会得到println,有时则没有 更新:我还在println之后使用System.out.flush() 更新:感谢您的调试帮助。结果是,一个阻塞调用打开了一个对话框,使得输出的顺序大不相同。我认为我试图打印消息的方法在对话框关闭时被调用,但方法本身就是调用对话框的方法,因此在关闭之后,它已经通过了打印输出,这是我开始寻找测试的地方。如果有人能够删除这个问题,因为问题不是最初提

java的System.out.println在哪些情况下无法生成任何输出。我在一个方法中调用了它,有时调用该方法时,我会得到println,有时则没有

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


更新:感谢您的调试帮助。结果是,一个阻塞调用打开了一个对话框,使得输出的顺序大不相同。我认为我试图打印消息的方法在对话框关闭时被调用,但方法本身就是调用对话框的方法,因此在关闭之后,它已经通过了打印输出,这是我开始寻找测试的地方。如果有人能够删除这个问题,因为问题不是最初提出的问题,我们将不胜感激。

我以前从未见过这种情况。理论上,只有当输出不在您期望的位置时,它才会“失败”。也就是说,可以使用。

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

编辑:

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

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


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

您在哪里检查输出?可能是
System.out
已重定向到其他位置,因此可能您查找的位置不正确。

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上运行此命令,您将无法按预期打印“hey fellas”。相反,它将根据@BalusC的建议重定向到文件C:\foo.txt--


感谢您的调试帮助。结果是,一个阻塞调用打开了一个对话框,使得输出的顺序大不相同。我认为我试图打印消息的方法在对话框关闭时被调用,但方法本身就是调用对话框的方法,因此在关闭后,它已经通过了打印输出,这是我开始寻找测试的地方。如果有人能够删除此问题,因为该问题不是最初提出的问题,我们将不胜感激。

您确定执行已到达调用println的位置吗?您是否已将其连接到调试器以确保正在调用它?是否确实正在调用该方法?如果无法写入输出,是否意味着调用无法写入控制台?在这种情况下,请检查“输出”流是否已重定向。只需在之前放置一个println以确保它是cal…哦,等等…您可能需要在问题中提供更多的上下文。例如,关于环境和使用的代码的更多细节,以及您是否能够在不同的环境和/或使用一些简单的“hello world”代码重现这些信息。正确。不幸的是,我不得不使用可怕的库,这些库只在stdout或stderr上打印随机内容,无法关闭它们,我很想使用System.setOut(new PrintStream(new NullOutputStream());(),稍后重置标准输出。对于快速而肮脏的单线程程序来说,这是一个不错的解决方案。但如果是这种情况,而某些库正在这样做,那就更糟了。可以只打印System.err.println(System.out);,查看自应用程序启动以来是否更改了标准输出。(如果stderr本身发生了更改,当然必须在别处打印)。[code]System.out.flush();System.out.println(“---------------------------”);System.out.println(“\n\n::LAT::(“+status+”)\n”);System.out.println(“---------------------------”);System.out.flush();Thread.dumpStack();方法顶部的[code]。我知道该方法正在被调用,因为它调用的方法正在成功打印,并且它们的dumpStacks()在traceAre中显示了该方法。其他仅由该方法调用的方法是什么?有多个线程吗?Thread.dumpStack打印到System.err,而不是System.out,因此,除非刷新System.err,否则堆栈转储可能不符合预期顺序。