通过双击运行Java Swing应用程序(无控制台)



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

注意,我只有一个JAR,没有源代码。

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

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

如果您打算停止日志记录,您可以使用Logger#setLevel(Level.OFF)关闭日志记录(假设您使用的是标准日志记录器)。如果您的目的是减少日志消息的冗长性,则可以使用Level。例如WARNING,只有WARNING和SEVERE消息会被记录。一般情况下,您可以将要记录的最低级别设置为任意级别。当你的应用程序在没有控制台的情况下启动时,它通常没有Console附加到它(但我认为这是一个平台问题,例如,一些平台可能提供中央控制台,我认为当Java web应用程序在servlet容器中运行时,即使容器是从控制台启动的,通常也没有附加的控制台),所以我不会以任何理由打赌我的代码。如果你仍然希望你的日志在运行时没有附加Console的应用程序中,你可以使用Logger#addHandler(FileHandler)将日志消息重定向到一个文件。

通常不推荐使用System.out.println()进行日志记录。这是一个io操作,耗时。如果需要关闭,需要在代码中手动注释。

使用log4j或java Logger

System.out.prinln()打印到流程的输出流。JVM不知道也不关心输出的实际去向。它可以是控制台,也可以重定向到文件,或者通过管道连接到另一个进程,或者发送到任何地方。该指令是一个阻塞操作,因此该指令所花费的时间取决于它实际运行的位置。打印到控制台比打印到文件慢,而文件又比不打印到任何地方慢。

相关内容

最新更新