Java “怎么办?”;System.out.println();在可执行jar中?

Java “怎么办?”;System.out.println();在可执行jar中?,java,executable-jar,system.out,Java,Executable Jar,System.out,假设我从我使用的代码创建了一个可执行jar System.out.println() 当我们运行可执行jar时,没有控制台。那么,这条线怎么了?java如何处理这种情况 编辑01: 注意:情况是我不使用控制台运行jar,也不将任何控制台与之关联 编辑02:让事情更清楚: 我知道任何地方都不会打印任何内容,因为没有控制台。。!我想知道在这种情况下,java如何处理这一行?为可执行jar生成字节码时是否省略了这一行?或者,当没有控制台时,这条线只是被忽略了?或者任何东西…如果从控制台(java-j

假设我从我使用的代码创建了一个
可执行jar

System.out.println()

当我们运行可执行jar时,没有控制台。那么,这条线怎么了?
java
如何处理这种情况

编辑01

注意:情况是我不使用控制台运行
jar
,也不将任何控制台与之关联

编辑02:让事情更清楚:


我知道任何地方都不会打印任何内容,因为没有控制台。。!我想知道在这种情况下,
java
如何处理这一行?为可执行jar生成字节码时是否省略了这一行?或者,当没有控制台时,这条线只是被忽略了?或者任何东西…

如果从控制台(java-jar-YourJar.jar)打开它,文本将在控制台窗口中打印出来

如果在资源管理器(或类似工具)中打开它,则不会看到文本

要澄清您的第二次编辑: 字节码不会被省略,因为编译器无法知道jar将在什么上下文中执行。jar始终可以从控制台调用,在这种情况下,println必须留在那里

事实上,否则许多jar文件将完全无用。有很多Java程序通过控制台和输出与用户交互。
java程序不需要GUI(或完全在后台运行)。

在可执行jar文件中运行代码没有什么特别之处。如果您从控制台运行它,例如使用
java-jarfoo.jar
,输出仍将转到控制台

如果您以某种不附加控制台的方式运行代码,例如Windows上的
javaw
,这是与可执行jar文件关联的默认程序,那么输出将不会出现在任何地方。它不会导致任何错误-文本将丢失

请注意,在这种情况下,如果改用
System.console()
,将返回
null
。因此:

System.out.printf("Foo%n"); // No problem. Goes nowhere.
System.console().printf("Foo%n"); // Would throw a NullPointerException.

只要不从控制台窗口(
java-jar executable.jar
)运行应用程序,就可以省略输出。此外,您可以配置Java安装,以便在启动Java应用程序时立即启动控制台windows。然后,输出将写入JVM的控制台窗口。您可以在Java官方网站上找到一篇文章


“当我们运行可执行jar时,没有控制台”-这取决于您如何运行它。如果您从控制台运行
java-jar foo.jar
,那么……我的意思是不使用控制台运行……那么让您的问题更清楚是值得的。您已经声明没有控制台,而这只是有时是正确的。如果您不使用控制台运行程序,那么您将看不到System.out.print的内容。可以把它看作主要用于测试/调试的东西。当您转到生产程序时,不应使用此选项。如果您确实想使用System.out.print(),则可以从控制台重定向到文件:文本将丢失。因此,我是否可以假设这个
println()
方法的编写方式是,如果没有控制台,调用将被忽略?@minarmahmud:Well not ignored-我怀疑如果您使用
printf
并且有一些无效的格式字符串,例如,这将失败。但是输出不会有任何结果。