如何在没有CMD窗口的情况下运行jlink生成的Java运行时映像?

时间:2019-01-10 16:15:16

标签: java javafx java-11 jlink openjfx

我已经为一个简单的OpenJFX应用程序创建了Java运行时映像。为了运行此应用程序,jlink在%image_path%/bin目录下自动生成了两个lauch脚本。如下所示(适用于Windows):

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

很显然,当我运行此批处理文件时,它将打开新的Shell窗口,这不是我想要的。我已经尝试了所有常见方法:使用javaw代替java,通过start命令运行脚本,等等。

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

4 个答案:

答案 0 :(得分:0)

好的,我发现完全消除外壳窗口是不可能的。在最佳情况下,它只会闪烁约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的功能请求,但并未进行积极讨论。

尽管如此,我已经解决了这个问题。有“批处理EXE转换器”工具。它可以生成可执行文件(基本上是相同的批处理文件),该文件可以使您的应用程序静默运行。

答案 1 :(得分:0)

使用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

这将在同一目录中运行批处理文件,还将stdout重定向到日志文件。

答案 2 :(得分:0)

您想要实现的目标很有可能。实际上,这甚至很容易,我每天都在使用。可以在这里使用jpackage的早期访问版本:http://jdk.java.net/jpackage/创建可执行文件已经有效 很好(我在Mac和Windows上使用它)。仅创建安装程序仍然存在一些问题。

答案 3 :(得分:0)

在不显示cmd窗口的情况下运行bat文件非常容易。 您只需要创建 VBS 文件即可使用以下cmd运行bat文件

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

使用以下任何名称将cmd保存到bin文件夹之外的文件中 Launcher.vbs