[英]Runtime.exec won't run javac, but command line will
在我的程序中,我創建了一個.java 文件,然后編譯它。 我使用的命令如下所示:
javac -classpath [path to main directory]\my.jar -d [path to main directory]\bin [path to main directory]\src\pkg1\MyClass.java
這是使用以下代碼調用的:
Runtime runtime = Runtime.getRuntime()
runtime.exec(command)
但是,當我通過單擊 Eclipse 中的“運行”來運行它時,出現以下錯誤:
java.io.IOException: Cannot run program "javac": CreateProcess error=2,
The system cannot find the file specified
現在,我知道這意味着什么:我沒有正確安裝 Java,我的路徑變量需要包含 JDK。 然而,這個簡單假設的問題在於,當我從命令行使用完全相同的命令時它工作得非常好(顯然不是runtime.exec()
,但仍然如此)。 我知道這不是我的 Java 安裝或命令本身的故障,因為否則它將無法從命令行運行,那么剩下什么以及如何修復它?
您要求 JVM 運行名為“javac”的命令,但它失敗並出現錯誤:
java.io.IOException: Cannot run program "javac": CreateProcess error=2,
The system cannot find the file specified
JVM 不知道在哪里可以找到“javac”。 您是否能夠自己運行“javac”與JVM是否也可以運行該命令是分開的。
這是一個重現該行為的簡單程序——它嘗試運行“test.sh”:
String command = "test.sh";
Process process = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
System.out.println("command: [" + command + "] -- " + "output: [" + br.readLine() + "]");
運行該代碼將引發異常,因為 JVM 不知道在哪里可以找到“test.sh”:
java.io.IOException: Cannot run program "test.sh": error=2, No such file or directory
事實上,我的計算機上確實有“test.sh”,但我之前沒有在 Java 程序中指定完整路徑(“/var/tmp”)。 該腳本非常簡單,它只運行“日期”命令:
% cat /var/tmp/test.sh
#!/bin/sh
date "+%Y-%m-%d"
% /var/tmp/test.sh
2022-08-05
編輯命令使其使用“test.sh”的絕對路徑可以正常工作:
String command = "/var/tmp/test.sh";
command: [/var/tmp/test.sh] -- output: [2022-08-05]
javac
相同這也適用於“javac”——這是來自命令"/usr/bin/javac -version"
的 output:
command: [/usr/bin/javac -version] -- output: [javac 18.0.1.1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.