Javaアプリケーション内でこのコマンドラインを実行する方法はありますか?
Java -jar map.jar time.rel test.txt debug
コマンドで実行できますが、Java内では実行できませんでした。
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("Java -jar map.jar time.rel test.txt debug");
http://docs.Oracle.com/javase/7/docs/api/Java/lang/Runtime.html
次のような出力も見ることができます。
final Process p = Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug");
new Thread(new Runnable() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null)
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
p.waitFor();
また、Windowsで実行している場合は、コマンドの前に「cmd/c」を置く必要があることを忘れないでください。
標準出力および/またはエラーで大量のデータを出力する場合に呼び出されるプロセスがブロックされるのを回避するには、Craigoが提供するソリューションを使用する必要があります。また、ProcessBuilderはRuntime.getRuntime()。exec()よりも優れていることに注意してください。これにはいくつかの理由があります。引数をトークン化し、エラーの標準出力も処理します( here も確認してください)。
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();
// Watch the process
watch(process);
新しい関数「ウォッチ」を使用して、このデータを新しいスレッドに収集します。このスレッドは、呼び出されたプロセスが終了すると、呼び出しプロセスで終了します。
private static void watch(final Process process) {
new Thread() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
import Java.io.*;
Process p = Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug");
さらに問題が発生した場合は、次のことを考慮してください。ただし、上記の方法でうまくいくと思います。
Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug");
どう?
public class CmdExec {
public static Scanner s = null;
public static void main(String[] args) throws InterruptedException, IOException {
s = new Scanner(System.in);
System.out.print("$ ");
String cmd = s.nextLine();
final Process p = Runtime.getRuntime().exec(cmd);
new Thread(new Runnable() {
public void run() {
BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
try {
while ((line = input.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
p.waitFor();
}
}
Process p = Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug");
Runtimeクラス内でexecコマンドを試しましたか?
Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug")