如何在没有 CMD window 的情况下 运行 jlink 生成 Java 运行time 图像?

How to run jlink-generated Java runtime image without CMD window?

我已经为一个简单的 OpenJFX 应用程序创建了 Java 运行时间图像。为了 运行 这个应用程序,jlink 在 %image_path%/bin 目录下自动生成了两个启动脚本。这是它的样子(Windows 的那个):

@echo off
set JLINK_VM_OPTIONS=
set DIR=%~dp0
"%DIR%\java" %JLINK_VM_OPTIONS% -m app/com.package.Launcher %*

显然,当我 运行 这个批处理文件时,它会打开新的 shell window,这不是我想要的。我已经尝试了所有常见的方法:使用 javaw 而不是 java,通过 start 命令等使用 运行 脚本。没有任何效果。

是否可以避免 shell window 或以某种方式创建本机启动器?

好的,我发现完全消除 shell window 是不可能的。在最好的情况下,它只是闪烁约 1 秒。这是如何实现的:

@echo off
set JLINK_VM_OPTIONS=
set DIR=%~dp0
start "" "%DIR%\javaw" %JLINK_VM_OPTIONS% -m app/com.package.Launcher %* && exit 0

有一个关于 native laucher implementation 的功能请求,但没有积极讨论。

尽管如此,我还是解决了问题。有 "Batch to EXE Converter" 工具。它可以生成可执行文件(基本上是同一个批处理文件),可以 运行 您的应用程序静默。

这看起来可以使用 vbscript。如果将以下脚本放入 launcher.bat 文件(或批处理文件的任何名称)旁边的 .vbs 文件中:

CreateObject("Wscript.Shell").Run CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\launcher.bat " & WScript.Arguments(0) & " > " & CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName) & "\launch-log.log", 0, False

这会在同一目录中运行批处理文件,并将标准输出重定向到日志文件。

您想要实现的目标很有可能实现。它实际上什至非常简单,我每天都使用它。此处已经提供了 jpackage 的早期访问版本:http://jdk.java.net/jpackage/ Creating executables works already 很好(我在 Mac 和 Windows 上使用它)。只创建安装程序还是有点问题。

在不显示 cmd window 的情况下 运行 bat 文件非常容易。 您只需要使用以下命令创建 VBS 文件到 运行 bat 文件

Set WshShell = CreateObject("WScript.Shell") 
WshShell.Run chr(34) & ".\bin\launcher.bat" & Chr(34), 0
Set WshShell = Nothing

将cmd保存在bin文件夹外的文件中,名称任意 Launcher.vbs.