4

假设我有一个启动 Swing GUI 的可执行 JAR。如果它是从控制台启动的(例如java -jar myapp),那么控制台也被应用程序使用(即正在打印日志)。此日志记录需要一些时间,非常冗长。

请注意,我只有一个 JAR,而不是源代码。

问题:双击运行JAR会发生什么?显然没有日志是可见的,但它们只是不可见,还是这确实提高了应用程序的性能(通过跳过日志记录)?

4

4 回答 4

4

如果您不想看到控制台,请使用javaw启动程序而不是java. 所以你会运行:javaw -jar myapp.jar

于 2012-12-30T08:46:07.530 回答
3

如果您打算停止记录,您可以关闭您的记录Logger#setLevel(Level.OFF)(假设您使用的是标准记录器)。如果您的目的是减少日志消息的详细程度,则可以使用 Level.WARNING 例如,仅记录 WARNING 和 SEVERE 消息。通常,您可以将要记录的最低级别设置为任何级别。当您的应用程序在没有控制台的情况下启动时,它通常没有Console附加到它(但我认为这是一个平台问题,例如,我认为某些平台可能会提供中央控制台,而 Java Web 应用程序在 servlet 容器中运行,即使容器是从控制台开始通常没有附加控制台)所以我不会出于任何原因将我的代码打赌。如果您仍然希望您的日志在一个没有附加的应用程序中Console在运行时,您始终可以使用Logger#addHandler(FileHandler).

于 2012-12-30T08:51:10.373 回答
2

通常System.out.println()不是日志记录的首选。这是一个 IO 操作且耗时。如需关闭,需在代码中手动注释。

使用 log4j 或 java Logger。

于 2012-12-30T08:58:01.513 回答
1

System.out.prinln() prints to the output stream of the process. The JVM doesn't know and care about where the output actually goes. It could be the console, or it could be redirected to a file, or piped to another process, or sent to nowhere. The instruction is a blocking operation, so the time taken by the instruction depends on where it actually goes. Printing to a console is slower than printing to a file, which is slower than printing to nowhere.

于 2012-12-30T12:22:40.027 回答