我已经为一个简单的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窗口或以某种方式创建本机启动器?
答案 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 。