Esiste un modo per eseguire questa riga di comando all'interno di un'applicazione Java?Esecuzione della riga di comando in Java
java -jar map.jar time.rel test.txt debug
Posso eseguirlo con comando ma non potevo farlo all'interno di Java.
Esiste un modo per eseguire questa riga di comando all'interno di un'applicazione Java?Esecuzione della riga di comando in Java
java -jar map.jar time.rel test.txt debug
Posso eseguirlo con comando ma non potevo farlo all'interno di 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
è normale che quando provo ad emetterlo in console, emette solo qualcosa di simile a questo: [email protected] – Ataman
Usa 'pr.getInputStream()'. Ecco un esempio dettagliato: http://www.linglom.com/2007/06/06/how-to-run-command-line-or-execute-external-application-from-java/ – kol
È utile controllare cosa il processo ritorna con. Puoi ottenerlo con pr.waitFor(). Quindi assomiglia a questo: 'int retVal = pr.waitFor()'. Quindi se non è 0, puoi interrompere/ripulire. – 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");
Hai provato il comando exec all'interno della classe Runtime?
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");
Si consideri il seguente se si esegue in eventuali ulteriori problemi, ma credo che quanto sopra lavorerà per voi:
Puoi guarda anche l'output in questo modo:
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();
E non dimenticare, se stai utilizzando Windows, devi mettere "cmd/c" davanti al tuo comando.
Puoi anche usare p.getErrorStream per capire perché il tuo comando è rotto! – jakebeal
@Craigo: qualsiasi riferimento alla tua istruzione "cmd/c"? grazie – Campa
In realtà, penso che ti serva solo il "cmd/c", se vuoi eseguire un comando di Windows, come "copia". Scuse per la confusione. – Craigo
Per evitare che il processo chiamato venga bloccato se emette molti dati sullo standard output e/o errore, è necessario utilizzare la soluzione fornita da Craigo. Si noti inoltre che ProcessBuilder è migliore di Runtime.getRuntime(). Exec(). Questo è per un paio di motivi: migliora gli argomenti e si occupa anche dell'output dello standard di errore (controllare anche here).
ProcessBuilder builder = new ProcessBuilder("cmd", "arg1", ...);
builder.redirectErrorStream(true);
final Process process = builder.start();
// Watch the process
watch(process);
Uso una nuova funzione "watch" per raccogliere questi dati in una nuova discussione. Questo thread terminerà nel processo chiamante quando termina il processo chiamato.
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();
}
che dire
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();
}
}
ho cercato, Runtime rt = Runtime.getRuntime(); Process proc = rt.exec ("ping localhost"); – Ataman
Vuoi avviare una VM da un'altra VM? – chance