假设我有一个可执行的JAR来启动Swing GUI。如果它是从控制台启动的(例如java -jar myapp
),则应用程序也使用控制台(即正在打印日志)。这种记录需要一点时间,它非常详细。
请注意,我只有一个JAR,而不是来源。
问题:当您双击运行 JAR时会发生什么?显然没有日志可见,但它们只是不可见,或者这确实提高了应用程序的性能(通过跳过日志记录)?
答案 0 :(得分:4)
如果您不想看到控制台,请使用javaw
启动程序而不是java
。所以你可以运行:javaw -jar myapp.jar
答案 1 :(得分:3)
如果您打算停止记录,可以使用Logger#setLevel(Level.OFF)
关闭注销(假设您使用的是标准记录器)。如果您的目的是减少日志消息的详细程度,则可以使用Level.WARNING,例如,仅记录WARNING和SEVERE消息。通常,您可以将要记录的最低级别设置为任何级别。
当您的应用程序在没有控制台的情况下启动时,它通常没有附加Console
(但我认为这是一个平台问题,例如,一些平台可能提供我认为在servlet容器中运行的Java Web应用程序时的中央控制台即使容器是从控制台启动的,通常也没有连接控制台)所以我不会因为任何原因打赌我的代码。
如果您仍希望您的日志位于运行时没有附加Console
的应用程序中,您始终可以使用Logger#addHandler(FileHandler)
将日志消息重定向到文件。
答案 2 :(得分:2)
通常System.out.println()
不适合记录。这是一个IO操作并且耗时。如果您需要关闭,需要在代码中手动注释。
使用log4j或java Logger。
答案 3 :(得分:1)
System.out.prinln()
打印到进程的输出流。 JVM不知道并关心输出的实际位置。它可以是控制台,也可以重定向到文件,或通过管道传输到另一个进程,或者发送到任何地方。该指令是一个阻塞操作,因此指令所用的时间取决于它实际到达的位置。打印到控制台比打印到文件要慢,这比打印到任何地方要慢。