首先,我搜索了論壇和網絡5個小時,但找不到我的問題是什麼,所以我希望這不是重複的。javac:在ProcessBuilder中找不到文件。命令在ProcessBuilder參數中分開
我正在使用Java ProcessBuilder編譯和運行Java項目。當我鍵入
javac /Users/Katzenmeister/Desktop/Final/src/edu/kit/informatik/citationmanager/*.java
我MacOSX上的終端,我可以編譯整個文件夾中沒有任何錯誤。
在我的計劃,我有以下
public class CompilerController {
private static File directory;
private static String mainClass;
private static boolean compiled = false;
public static void setDirectory(File directory) {
CompilerController.directory = directory;
}
public static void setMainClass(String mainClass) {
CompilerController.mainClass = mainClass;
}
private static void compile() {
ProcessBuilder pb = new ProcessBuilder("javac",directory.getAbsolutePath()+"/*.java");
pb.inheritIO();
try {
pb.start();
compiled = true;
} catch (IOException ex) {
System.out.println(ex);
}
}
private static String[] getSourcePath() {
String[] strArr = directory.toString().split("src");
strArr[0] += "src";
strArr[1] += mainClass;
return strArr;
}
private static void run() {
ProcessBuilder pb = new ProcessBuilder("java",getSourcePath()[0],getSourcePath()[1]);
try {
pb.start();
} catch(IOException ex) {
System.out.println(ex);
}
}
public static void compileRun() {
compile();
if (compiled) {
run();
}
}
}
在我的JavaFX控制器I類使用DirectoryChooser和使用setDirectory傳遞絕對路徑CompilerController取得相應目錄()。
當我運行我的程序,我得到以下錯誤:
javac: file not found: /Users/Katzenmeister/Desktop/Final/src/edu/kit/informatik/citationmanager/*.java
Usage: javac <options> <source files>
use -help for a list of possible options
這是據我可以告訴我在我的終端工作同樣的事情。我現在只編寫了6個月,所以我缺乏知識,但我認爲這是由於JVM運行時目錄可能導致的。任何幫助是非常受歡迎的。這裏有一些我已經檢查了參考論壇鏈接:
ProcessBuilder can't find file?!
Run a .java file using ProcessBuilder
Compile and Run Java Program from another Java Program
ProcessBuilder can't find file?!
PS:這是我第一次在論壇上提問。我盡我所能去適應禮儀,如果我做錯了任何事情,請告訴我,這樣我可以編輯我的問題。
編輯:我得到的代碼工作的人如下誰可能有類似的問題
private static void compile() {
ArrayList<String> files = new ArrayList<>();
files.add("javac");
files.add("-sourcepath");
files.add("./*");
try {
for (File file : directory.listFiles()) {
if (!file.isHidden()) {
files.add(file.getName());
}
}
} catch(NullPointerException ex) {}
pb.directory(new File(directory.getAbsolutePath()));
pb.command(files);
pb.inheritIO();
try {
synchronized (processLock) {
Process pr = pb.start();
int i = pr.waitFor();
}
compiled = true;
} catch (IOException ex) {
System.out.println(ex);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
非常感謝我現在正在嘗試併發布結果 – Katzenmeister
我試過了你的建議,現在編譯器正在看到java文件。但是現在問題是這些類之間的依賴關係並沒有被找到,因爲我正在編譯每個類。例如,Foo類有一個ArrayList,並且由於Foo和Bar是獨立編譯的,所以Foo的編譯失敗。我怎樣才能克服這個問題? –
Katzenmeister
如果您希望命令以相同的方式執行,則它們必須在相同的環境中執行,例如,相同的環境變量,相同的當前目錄等 –