所以我有兩個檔案:Main.java 和 Second.java。我想使用 ProcessBuilder 處理流程。使用 cmd 我可以撰寫“javac Second.java”和“java Second 5”。我的 Second.java 看起來像那樣
public static void main(String[] args) {
System.out.println("Okay");
System.out.println(Integer.parseInt(args[0])); // I need it just for checking
System.exit( Integer.parseInt(args[0]));
}
我的第二個行程應該回傳特定的退出值(這就是我使用 System.exit() 的原因)。我知道 ProcessBuilder 不是 cmd。我試著像那樣運行它
Path currentRelativePath = Paths.get("");
String curDir=currentRelativePath.toAbsolutePath().toString();
curDir=curDir "\\src";
ProcessBuilder PB=new ProcessBuilder("java",curDir, "second", "5");
try {
Process process = PB.start();
process.waitFor();
System.out.println(process.exitValue());
}catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但這不起作用。我想我不需要完全在我的程式中創建類檔案,我稍后會通過 cmd 創建它們。我如何提供我在 Second.main() 中需要的 ProcessBuilder String[] 引數?
uj5u.com熱心網友回復:
您正在執行此命令: java directory second 5
這不是java命令的有效呼叫。語法是:
java [-options] 類 [引數...]
傳遞類名是正確的。傳遞目錄是不正確的。
您可以通過運行java -h或閱讀檔案來查看自己的語法。無需猜測什么是允許的。
你什么都允許做的是通過一個目錄作為引數的-cp選項,這可能是您的本意:
new ProcessBuilder("java", "-cp", curDir, "second", "5");
請注意,類名區分大小寫。如果您的類名為Second,則必須將相同的名稱(大寫S)傳遞給您的 java 命令:
new ProcessBuilder("java", "-cp", curDir, "Second", "5");
↑
Uppercase S
所有檔案路徑要么是絕對路徑,要么隱式地相對于當前目錄。您不需要所有處理currentRelativePath. 只寫這個:
String curDir = "src";
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/318370.html
上一篇:為了安寧,我應該對不同的獲取請求使用一種方法還是將它們分開
下一篇:如何解決vba中Selection.ShapeRange.Item(1)的"Objectdoesn'tsupportthispropertyormethod"錯誤?
