Est-il possible d'exécuter cette ligne de commande dans une application Java?
Java -jar map.jar time.rel test.txt debug
Je peux l'exécuter avec la commande mais je ne pouvais pas le faire dans 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
Vous pouvez également regarder la sortie comme ceci:
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();
Et n'oubliez pas, si vous utilisez Windows, vous devez placer "cmd/c" devant votre commande.
Pour éviter le blocage du processus appelé s'il génère beaucoup de données sur la sortie standard et/ou une erreur, vous devez utiliser la solution fournie par Craigo. Notez également que ProcessBuilder est supérieur à Runtime.getRuntime (). Exec (). C’est pour deux raisons: cela permet de mieux numériser les arguments et de prendre en charge la sortie standard des erreurs (vérifiez également ici ).
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();
// Watch the process
watch(process);
J'utilise une nouvelle fonction "watch" pour rassembler ces données dans un nouveau thread. Ce fil se terminera dans le processus d'appel à la fin du processus appelé.
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();
}
Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug");
import Java.io.*;
Process p = Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug");
Considérez ce qui suit si vous rencontrez d'autres problèmes, mais je suppose que ce qui précède fonctionnera pour vous:
qu'en est-il de
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");
Avez-vous essayé la commande exec dans la classe Runtime?
Runtime.getRuntime().exec("Java -jar map.jar time.rel test.txt debug")