1

我为一个简单的 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

4 回答 4

1

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

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

有一个关于本机 laucher 实现的功能请求,但没有积极讨论。

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

于 2019-01-10T18:16:07.853 回答
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

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

于 2019-08-13T19:33:33.927 回答
0

你想要达到的目标是很有可能的。它实际上甚至非常简单,我每天都使用它。这里已经有一个 jpackage 的早期访问版本:http: //jdk.java.net/jpackage/创建可执行文件已经很好地工作了(我在 Mac 和 Windows 上使用它)。仅创建安装程序仍然有点问题。

于 2019-08-13T22:19:11.893 回答
0

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

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

使用任何名称(如Launcher.vbs)将 cmd 保存在 bin 文件夹外的文件中 。

于 2020-09-26T08:26:44.390 回答