Java自包含包等待完成

问题描述 投票:0回答:1

我有一个应用程序,需要成为一个独立的应用程序,可以在没有Java的计算机上安装。我正在使用javapackager命令创建一个可以发送给用户的EXE,其中包含所有需要的部分。从简单的意义上讲,该应用程序读取第一个参数引用的文件,对其进行转换,然后将结果写回到源文件旁边。当直接以JAR形式运行它,以及通过内置EXE运行它时,所有这些方法都可以工作。

问题是,触发可执行文件时,它会立即将执行返回给命令提示符,而不是等待进程完成。我不想轮询输出目录来检查文件是否存在,然后给出何时停止查找的任意超时-我希望应用程序知道控制台命令完成后,处理就完成了。那时,我可以根据是否找到结果文件进行逻辑处理,并在未找到结果文件或其他任何逻辑正确的情况下发出警报。

是否有一种方法可以告诉javapackager命令设置一个等待,直到Java死掉(好坏)再返回控制权?除非有代码片段/概念,否则该代码片段/概念将使该应用推迟将控制权释放回终端,直到JVM死亡为止。

java javapackager
1个回答
0
投票

对于使用Oracle JDK 8、9和10随附的javapackager以及OpenJDK 13的快照打包的应用程序,我可以确认此行为。尽管生成的二进制文件在macOS和Linux下表现“符合预期”, Windows二进制文件似乎只是产生了一个新进程并立即退出。

[从Java 9开始,jpackager在内部调用jlink,它具有选项--strip-native-commands,该选项基本上从嵌入式JRE中删除二进制文件。使用Java 8,您没有此选项,并且[[always等可执行文件已被删除。但是我的测试表明,JRE在其他方面已经完成,您应该可以简单地手动添加java.exe(更好地进行测试!)。

因此,我提出以下解决方法:

    使用java.exe创建应用程序目录
  1. 将系统范围内的JRE安装中的javapackager -deploy -native image复制到java.exe(检查许可证是否涵盖重新分发java.exe!)
  2. {OUTDIR}\runtime\bin中创建一个调用{OUTDIR}的.bat文件。
  3. 现在将runtime\bin\java.exe -jar ./app/yourapp.jar添加到您的.msi或innosetup安装程序或.zip文件或您选择的任何分发方式;-)
  • 然后您可以调用bat文件而不是exe。由于它只是{OUTDIR}的包装器,因此它将等到您的程序完成。
  • © www.soinside.com 2019 - 2024. All rights reserved.