我試圖運行Java中由c生成的可執行文件。本來,我可以Java Runtime.getRuntime()。exec用參數運行「c可執行文件」
./bin/svm-train -s 0 -t 0 -d 3 -g 0.0 -r 0.0 -n 0.5 -m 40.0 -c 1.0 -e 0.001 -p 0.1 ./data/trainfile ./model/update.model
終端上運行它在終端這個命令的效果很好,這將需要幾秒鐘的代碼表示生成一個文件「update.model」。
但是當我嘗試把這個過程在Java中使用下面的代碼,程序不會產生「update.model」
String[] cmdUpdateTrain = new String[]{"/bin/bash", "-c", "./bin/svm-train -s 0 -t 0 -d 3 -g 0.0 -r 0.0 -n 0.5 -m 40.0 -c 1.0 -e 0.001 -p 0.1 ./data/trainfile ./model/update.model"};
Runtime.getRuntime().exec(cmdUpdateTrain);
如果我嘗試使用Java以下代碼結束,它工作正常的模型也可以生成。
String[] cmdUpdateTrain = new String[]{"/bin/bash", "-c", "./bin/svm-train ./data/trainfile ./model/update.model"};
Runtime.getRuntime().exec(cmdUpdateTrain);
所以我認爲這可能是處理參數./bin/svm-train
的問題。
我找到了它發生的原因。這是因爲程序在執行./bin/svm-train
停止之前結束。 而下面的代碼解決了這個問題。
try{
String[] cmdUpdateTrain = new String[]{"/bin/bash", "-c", "./bin/svm-train -s 0 -t 0 -d 3 -g 0.0 -r 0.0 -n 0.5 -m 40.0 -c 1.0 -e 0.001 -p 0.1 ./data/trainfile ./model/update.model"};
Process psTrain = Runtime.getRuntime().exec(cmdUpdateTrain);
psTrain.waitFor();
}catch(InterruptedException interupt){
}
你說這是行不通的。當你嘗試運行它會發生什麼?你有沒有收到任何錯誤信息?請修改您的問題以包含此信息。 – Kenster 2015-02-08 13:05:51