从批处理文件运行可执行jar,但要打开控制台,以便用户可以看到输出不使用“ java -jar”

问题描述

我已经创建了一个可执行的jar文件,双击它可以正常工作。但是有必要在执行结束时显示输出。我使用带有start xxx.jar命令的批处理文件,它执行jar,但没有控制台和输出。然后,我用java -jar XXX.jar来完成这项工作,但这里的问题是用户可能未安装jre。 有什么建议吗?

解决方法

start将要求Windows使用注册表中配置的默认启动器启动文件。

这自然意味着什么都不会发生/除非您遇到一个奇怪的情况,即最终用户实际上已经安装了一个JVM,这是您不应该依赖的,并且您绝对不知道哪个JVM,否则将不会发生错误。也就是说,或者是哪个版本,或者是否已正确维护。它还将使用javaw.exe,这是不显示控制台的控制台,您绝对不能做任何更改。

我认为您误会了-您想要一种在以下情况下可以解决问题的解决方案

  • 用户自己安装了JDK或(过时的)JRE,并以双击jar文件实际上有效的方式安装了它,但是...
  • 没有更新PATH变量,或者没有确保命令行上的java有效

我认为这根本不涉及很多安装。绝大多数部署将是“用户未安装任何Java”,在这种情况下,startjava -jar都不是解决方案,或者他们将Java安装在路径上,在这种情况下,批处理文件中的java -jar可以正常工作。

好的,您如何部署Java应用程序

在现代?使用jlink创建一个压缩可执行文件,然后编写自己的安装程序,该程序将安装您信任的JVM(制作的一个jlink较小,因为不需要该应用程序的所有位都不需要),从而使用户能够运行您的应用程序,而无需“查找并安装Java”。不幸的是,这比以前要困难得多,并且要求您使用模块系统。

听起来像是太多的工作,旧方法有什么问题?

JRE(可以运行Java应用程序,但不包含任何开发工具的Java虚拟机)的概念是死的。没有更多的JRE。现在已经有7年历史的java8才是最后一次出现,而oracle发布的JRE几乎已经过时了:他们已经停止支持它了,或者马上就会实现。这意味着您要让用户安装不再接收安全更新的软件。这就是为什么这样做很不好。抱歉成为坏消息的承担者。