[英]using Runtime.exec() in Java
在Java中你需要做什么才能讓Runtime.exec()運行路徑上的程序? 我正在嘗試運行我已放入路徑的gpsbabel(/ usr / local / bin)。
public class GpxLib {
public static void main(String[] args) {
try
{
Runtime r = Runtime.getRuntime();
Process p = r.exec("gpsbabel -i garmin -f usb: -o gpx -F -");
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while (true)
{
String s = br.readLine();
if (s == null)
break;
System.out.println(s);
}
br.readLine();
} catch (IOException e) {
e.printStackTrace(System.err);
}
}
}
不管你做什么,你必須閱讀此 。 沒有人應該使用Runtime.exec()
而不讀它。
它將繼承Java進程的路徑。 因此,無論Java進程具有什么環境,生成的進程都會有。 以下是檢查環境的方法:
Map<String, String> env = System.getenv();
for (String envName : env.keySet()) {
System.out.format("%s=%s%n", envName, env.get(envName));
}
你有沒有設置PATH
並導出它? 如果不導出它,則子進程無法使用它。
此外,您必須同時使用stdout和stderr,以防止阻塞。 否則東西會在某些情況下起作用,然后你的衍生過程將輸出不同數量的數據,一切都將停止。
有關詳細信息,請參閱此答案 。
這是解決方案:
ProcessBuilder proc = new ProcessBuilder("<Directory PAth>" + "Executable.exe");
proc.redirectOutput(ProcessBuilder.Redirect.INHERIT);
proc.directory(fi); //fi = the output directory path
proc.start();
是程序\\應用程序的可刪除位置的路徑,例如“C:\\ MyProg”
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.