¿Hay alguna manera de ejecutar esta línea de comando dentro de una aplicación Java?Ejecutando la línea de comando en Java
java -jar map.jar time.rel test.txt debug
Puedo ejecutarlo con el comando pero no pude hacerlo dentro de Java.
¿Hay alguna manera de ejecutar esta línea de comando dentro de una aplicación Java?Ejecutando la línea de comando en Java
java -jar map.jar time.rel test.txt debug
Puedo ejecutarlo con el comando pero no pude hacerlo dentro de 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
es normal que cuando trato de enviarlo a la consola solo emita algo como esto: [email protected] – Ataman
Use 'pr.getInputStream()'. Aquí hay un ejemplo detallado: http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/ – kol
Es útil verificar qué el proceso vuelve con. Puedes obtener eso con pr.waitFor(). Por lo tanto, se ve así: 'int retVal = pr.waitFor()'. Entonces, si no es 0, puede abortar/limpiar. – Shiki
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");
Ha intentado el comando exec dentro de la clase en tiempo de ejecución?
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");
Considere lo siguiente si llegas a tener más problemas, pero supongo que lo anterior va a trabajar para usted:
Puede también mire la salida de esta manera:
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();
Y no olvide, si está ejecutando en Windows, debe poner "cmd/c" delante de su comando.
¡También puede usar p.getErrorStream para entender por qué su comando está roto! – jakebeal
@Craigo: cualquier referencia con respecto a su declaración "cmd/c"? thx – Campa
En realidad, creo que solo necesitas el "cmd/c", si quieres ejecutar un comando de Windows, como "copiar". Disculpas por la confusión. – Craigo
Para evitar que el proceso llamado sea bloqueado si genera una gran cantidad de datos en la salida estándar y/o error, debe usar la solución provista por Craigo. Tenga en cuenta también que ProcessBuilder es mejor que Runtime.getRuntime(). Exec(). Esto se debe a un par de razones: tokenizes mejor los argumentos, y también se encarga de la salida estándar de error (también ver here).
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();
// Watch the process
watch(process);
Utilizo una nueva función "ver" para recopilar estos datos en un nuevo hilo. Este hilo finalizará en el proceso de llamada cuando finalice el proceso llamado.
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();
}
qué sobre
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();
}
}
He tratado, Runtime rt = Runtime.getRuntime(); Proceso proc = rt.exec ("localhost ping"); – Ataman
¿Desea iniciar una máquina virtual desde otra máquina virtual? – chance