使用 javapackager 工具重定向打包在可执行文件中的 java 应用程序的 stdout

Bli*_*vvy 6 java

我正在使用JDK中的javapackager工具将java命令行应用程序打包成Windows可执行文件。

不幸的是,当我从命令提示符执行生成的 .exe 文件时,打包的 Java 应用程序的标准输出不会重定向回命令提示符。这会阻止用户查看应用程序的输出。

有没有办法配置 javapackager 工具,以便将 Java 应用程序中的 stdout 重定向到启动它的命令提示符?

任何帮助,将不胜感激!

小智 3

有类似的问题。在我的应用程序中,如果未提供命令行选项,则 main 函数将运行 JavaFX GUI,并使用参数运行 CLI。如果没有 stdout,用户就无法知道应用程序在运行命令行版本时是否正确执行。

.exe 运行与 javaw.exe 等效的内容,因此 stdout 被抑制。您可以在命令行将 stdout 通过管道传输到文件,也可以运行“MyApp.exe | MORE”,它将把 stdout 打印回控制台。

对于我的最终解决方案,我添加了一个下拉列表“package\windows\MyApp-post-image.wsf”以在安装目录中创建批处理脚本。

<?xml version="1.0" ?>
<package>
    <job id="postImage">
        <script language="JScript">
            <![CDATA[
                var fso, f;
                fso = new ActiveXObject("Scripting.FileSystemObject");
                f = fso.CreateTextFile("MyApp/MyApp.bat", true);
                f.WriteLine("@echo off");
                f.WriteLine("MyApp.exe %* | MORE");
                f.Close();
            ]]>
        </script>
    </job>
</package>
Run Code Online (Sandbox Code Playgroud)

批处理脚本将任何命令行参数传递给 EXE,并将输出通过管道传输回控制台。如果您的命令行应用程序在执行期间需要用户输入,则此方法将不起作用。