Java 调用外部进程 - exe
Java calling an external process - exe
我正在构建一个 java 应用程序,它有时会使用外部 exe。在这一点上,我试图简单地将这个 exe 添加为某种库,我可以在进程调用中使用它,这样用户就不必安装它了。
这个 exe 文件是一个命令行工具,它产生一些输出,由应用程序进一步处理。
所以我的问题是,如何在 java 应用程序中包含 exe 文件,而不是将其作为系统进程调用。同样可以接受的是,如果此 exe 位于最终的 lib 文件夹中,java 应用程序将在其中获取并执行它。
我希望一切都清楚,感谢您的帮助。
Java 通过几种方式与其他(本机)代码交互:
- 通过 Java 本机接口 (JNI)
到专门编码的库
- 通过使用
Runtime.getRuntime().exec(...)
分叉子进程来使用外部工具
- 通过网络通讯
在第一种情况下,将 JNI 库包含在 Java 程序中很有用。可以考虑将其作为 class 资源包含在 JAR 文件中,但这与 JAR 文件(包含 classes 和资源)的想法背道而驰。您更有可能将库(针对所有目标平台)与某种安装包(例如 InstallAnywhere 或其他)捆绑在一起
在第二种情况下,将二进制文件包含到您的 Java 程序中(即在 JAR 文件中)是没有用的。相反,它很可能有(应该有)自己的安装过程,并且您的 Java 代码应该使用适当的命令行 (PATH) 来查找可执行文件。
我认为第三种情况不相关。
我正在构建一个 java 应用程序,它有时会使用外部 exe。在这一点上,我试图简单地将这个 exe 添加为某种库,我可以在进程调用中使用它,这样用户就不必安装它了。
这个 exe 文件是一个命令行工具,它产生一些输出,由应用程序进一步处理。
所以我的问题是,如何在 java 应用程序中包含 exe 文件,而不是将其作为系统进程调用。同样可以接受的是,如果此 exe 位于最终的 lib 文件夹中,java 应用程序将在其中获取并执行它。
我希望一切都清楚,感谢您的帮助。
Java 通过几种方式与其他(本机)代码交互:
- 通过 Java 本机接口 (JNI) 到专门编码的库
- 通过使用
Runtime.getRuntime().exec(...)
分叉子进程来使用外部工具
- 通过网络通讯
在第一种情况下,将 JNI 库包含在 Java 程序中很有用。可以考虑将其作为 class 资源包含在 JAR 文件中,但这与 JAR 文件(包含 classes 和资源)的想法背道而驰。您更有可能将库(针对所有目标平台)与某种安装包(例如 InstallAnywhere 或其他)捆绑在一起
在第二种情况下,将二进制文件包含到您的 Java 程序中(即在 JAR 文件中)是没有用的。相反,它很可能有(应该有)自己的安装过程,并且您的 Java 代码应该使用适当的命令行 (PATH) 来查找可执行文件。
我认为第三种情况不相关。