java - 无法使用 java 运行外部 jar
问题描述
我想用java运行一个外部jar,所以我尝试使用Runtime.getRuntime().exec("java -jar path to my file.jar")
但它不会运行,我在控制台中没有错误。我尝试了 ProcessBuilder 和同样的问题。有人可以帮我吗?
https://i.stack.imgur.com/RqINN.png
顺便说一句,当我在 cmd 中执行命令时它可以工作
解决方案
在 java 中,您实际上不能依赖可以找到的 java 可执行文件。“从我的 java 应用程序中启动另一个 VM”不是 java 自然提供的。
您的 jar 文件中可能有空格。我强烈建议您始终使用
ProcessBuilder
, 并使用采用字符串数组/字符串集合而不是一个大字符串的形式,以避免空格问题(一个大字符串意味着 java 只会在空格上拆分,并且对输入比您可能从命令行习惯的输入,其中 bash 做了很多。一般来说,电话
java
或其他任何相关的事情都是非常不确定的。您应该输入一个完全合格的路径。这自然会导致以下问题:是的,嗯,我不知道 java 可执行文件在哪里。是的,但你也不知道操作系统知道它在哪里。在 Windows 上,它甚至不是正确的可执行文件(javaw
可能是您想要的,在其他平台上不存在)。首先从你机器上的绝对路径开始,只是为了检查问题是java
不是相对的。
因此,从这里开始:
public static void main(String[] args) throws Exception {
ProcessBuilder pb = new ProcessBuilder("C:\\Program Files\\Java\\Java 1.8\\javaw.exe", "-jar" "C:\\Users\\Erwann\\Desktop\\aled.jar");
Process p = pb.start();
}
将路径修复为您的 java实际所在的位置(我刚刚开辟了一条路径!)
然后,根据这是否有效,接下来的步骤是找出 jar 出了什么问题,或者找出如何动态获取该路径(这并不容易,而且会很困难进行测试,因为它基本上是依赖于系统的代码)。
推荐阅读
- c# - Swashbuckle - 同一端点生成多个 operationId
- c# - 通过 C# MongoDB 驱动程序聚合查询结果
- python - 尝试在 Heroku 上部署时出现 H10 应用程序崩溃错误后出现文件引用错误
- javascript - 如何限制另一个 div 内的 div 移动?
- docker - Github docker包注册表清单拉问题
- spring-cloud-dataflow - 在 Cloud Foundry 中保护 Spring Cloud Data Flow Server
- javascript - 错误:ENOENT:没有这样的文件或目录,打开“public/community_updates/1621342668954index.jpg”]
- css - 将许多 scss 文件写入一个缩小的 css
- spring-boot - SpringBoot SecurityConfig 忽略 onAuthenticationSuccess
- html - HTML 和 CSS 照片未显示