我有一个应用程序,我需要一个独立的应用程序,可安装,在计算机上,可能没有Java。我在用 javapackager 命令创建可发送给用户的EXE,其中包含所需的所有部分。简单地说,应用程序读取第一个参数引用的文件,对其进行转换,然后在源文件旁边写回结果。当直接将其作为JAR运行时,以及通过构建的EXE运行时,所有这些都可以工作。
javapackager
问题是,当触发可执行文件时,它会立即将执行返回到命令提示符,而不是等待进程完成。我不想轮询输出目录来检查文件是否存在,然后在何时停止查看时给出一些超时时间。我希望应用程序知道一旦控制台命令完成,处理就完成了。那时,我可以根据是否找到结果文件来进行逻辑操作,如果没有找到结果文件或任何其他逻辑正确,则发出警报。
有没有办法告诉 javapackager软件包 命令设置一个等待直到Java死(好或坏)后再返回控制?除此之外,是否有一个代码片段/概念会使应用程序在JVM死之前延迟将控制权释放回终端?
javapackager软件包
我可以确认我打包使用的应用程序的这种行为 javapackager 包括在OracleJDK8、9和10以及OpenJDK13的快照中。虽然生成的二进制文件在MaOS和Linux下表现为“意料之中”,但Windows二进制文件似乎只是产生了一个新进程并立即退出。
从Java 9开始 jpackager 调用 jlink 在内部,它有一个选择 --strip-native-commands 基本上从嵌入式JRE中删除二进制文件。对于Java8,您没有这个选项和可执行文件,比如 java.exe 是 总是 远离的。但是我的测试显示JRE是完整的 应该 能够简单地包括 java.exe 手动(最好彻底测试!).
jpackager
jlink
--strip-native-commands
java.exe
因此,我建议采取以下解决办法:
javapackager -deploy -native image
{OUTDIR}\runtime\bin
{OUTDIR}
runtime\bin\java.exe -jar ./app/yourapp.jar
然后可以调用bat文件而不是exe。因为它只是 java -jar 它将一直等到你的程序完成。
java -jar