如何使用ProcessBuilder启动带JavaFX模块参数的可运行jar包
问题原因
ProcessBuilder 对参数的解析逻辑和终端不同,终端会自动按空格拆分参数,但是ProcessBuilder要求每个独立参数必须单独作为字符串传入,你原代码中将--module-path和对应的路径值合并成了同一个参数,导致JVM无法识别该参数。
另外注意JDK的执行文件名称是小写的java,大小写敏感的系统(如macOS/Linux)下大写的Java会触发文件找不到错误。
正确写法
ProcessBuilder pb = new ProcessBuilder( "/Users/rawfodog/Documents/OpenJRE11/Contents/Home/bin/java", "-jar", "--module-path", "/Users/rawfodog/Downloads/AllLibrary", "--add-modules=javafx.controls,javafx.fxml", "/Users/rawfodog/Downloads/app.jar" ); // 合并标准输出和错误输出,避免进程因缓冲区满卡住 pb.redirectErrorStream(true); Process process = pb.start();
额外排查建议
如果运行仍然报错,可以读取进程的输入流打印执行日志,定位具体问题:
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } int exitCode = process.waitFor(); System.out.println("命令执行退出码:" + exitCode);
内容的提问来源于stack exchange,提问作者Rawfodog
相关产品推荐
相关产品推荐

