View Full Version : [java] eseguire comando con Runtime
Oceans11
11-12-2006, 16:04
il metodo statico Runtime.exec(String) funziona se devo aprire la calcolatrice, esplora risorse, regedit, ecc....ma se provo ad eseguire cmd oppure command non fa proprio niente...e con niente intendo dire che non mi da neanche errore!!!come mai???
(sto usando windows xp pro e sdk 1.5)
Oceans11
12-12-2006, 17:49
nessuno sa indicarmi la retta via?? :(
Immagino che sia un problema di sintassi. Supponendo di voler eseguire il comando "copy FileA.txt FileA.copy.txt", la sintassi sarebbe:
String[] command = {
"cmd", "/K", "copy", "FileA.txt", "FileA.copy.txt"
};
Runtime.getRuntime().exec(command, null, null);
In Java 5
new ProcessBuilder(
"cmd", "/K", "copy", "FileA.txt", "FileA.copy.txt").start();
Quando incontri qualche problema con i comandi Runtime, butta l'occhio all'help del comando di sistema che stai cercando di eseguire. Di solito c'è sempre una virgoletta in più o in meno da mettere.
Oceans11
12-12-2006, 18:50
Immagino che sia un problema di sintassi. Supponendo di voler eseguire il comando "copy FileA.txt FileA.copy.txt", la sintassi sarebbe:
String[] command = {
"cmd", "/K", "copy", "FileA.txt", "FileA.copy.txt"
};
Runtime.getRuntime().exec(command, null, null);
In Java 5
new ProcessBuilder(
"cmd", "/K", "copy", "FileA.txt", "FileA.copy.txt").start();
Quando incontri qualche problema con i comandi Runtime, butta l'occhio all'help del comando di sistema che stai cercando di eseguire. Di solito c'è sempre una virgoletta in più o in meno da mettere.
credo di non essermi spiegato bene...
apparte che ho provato anche con il comando "dir", proprio come nell'esempio che mi hai fatto tu.[edit: e non funziona lo stesso! :( ]
Comunque il mio problema (mi scuso per l'incomprensione) è che vorrei eseguire proprio un altro "cmd.exe" (oltre quello che uso per lanciare la VM) e basta, senza parametri!
spero nel tuo aiuto!
PS: dovrebbero fare una statua a te e andbin!!!! :D siete i mejo!
^TiGeRShArK^
12-12-2006, 19:08
credo di non essermi spiegato bene...
apparte che ho provato anche con il comando "dir", proprio come nell'esempio che mi hai fatto tu.[edit: e non funziona lo stesso! :( ]
Comunque il mio problema (mi scuso per l'incomprensione) è che vorrei eseguire proprio un altro "cmd.exe" (oltre quello che uso per lanciare la VM) e basta, senza parametri!
spero nel tuo aiuto!
PS: dovrebbero fare una statua a te e andbin!!!! :D siete i mejo!
bhè..
se è quello ke penso io il problema è abbastanza rognoso e mi aveva fatto perdere una mezz'oretta di sbattimenti su google ai tempi...
Praticamente a me accadeva che cmd (o un qualsiasi .bat da lanciare tramite cmd) non poteva partire se non grabbavi l'outputstream.
Avevo trovato una classettina già fatta ke risolveva egregiamente il problema, ma ce l'ho al lavoro :p
se trovo un minutino di tempo domani te la posto così vedi se il problema dipende da quello....
per aprire la finestra del prompt del dos, in windows, la sequenza di stringhe è
"cmd", "/C", "start"
cioè
new ProcessBuilder("cmd", "/C", "start").start();
Nel caso del comando dir a me:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder("cmd", "/C", "dir");
Process p = builder.start();
Scanner in = new Scanner(p.getInputStream());
while(in.hasNextLine()) {
System.out.println(in.nextLine());
}
}
}
sembra funzionare (WindowsXP).
^TiGeRShArK^
12-12-2006, 19:15
Intanto mi sono ricordato dove avevo trovato l'articolo originale :p
qui c'è il link http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1
è spiegato abbastnza bene e nn dovresti avere problemi di sorta ad adattare il tuo codice per farlo funzionare ;)
^TiGeRShArK^
12-12-2006, 19:17
per aprire la finestra del prompt del dos, in windows, la sequenza di stringhe è
"cmd", "/C", "start"
cioè
new ProcessBuilder("cmd", "/C", "start").start();
Nel caso del comando dir a me:
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder("cmd", "/C", "dir");
Process p = builder.start();
Scanner in = new Scanner(p.getInputStream());
while(in.hasNextLine()) {
System.out.println(in.nextLine());
}
}
}
sembra funzionare (WindowsXP).
si confermo...
così ad okkio direi ke dovrebbe andare perchè lo stai lanciando in un altro thread e non resta in attesa di qualcuno ke "catchi" l'outputstream.
Però così facendo non ti perdi tutto l'output? :confused:
Oceans11
12-12-2006, 19:18
bhè..
se è quello ke penso io il problema è abbastanza rognoso e mi aveva fatto perdere una mezz'oretta di sbattimenti su google ai tempi...
Praticamente a me accadeva che cmd (o un qualsiasi .bat da lanciare tramite cmd) non poteva partire se non grabbavi l'outputstream.
Avevo trovato una classettina già fatta ke risolveva egregiamente il problema, ma ce l'ho al lavoro :p
se trovo un minutino di tempo domani te la posto così vedi se il problema dipende da quello....
io è più di una mezz'oretta che mi sbatto su google!!! :rolleyes:
ma trovo solo esecuzione di cmd con parametri (es: "cmd /C dir"), che cmq non funzionano!
PS: stai entrando anche tu nella lista dei miei miti!!!! :D
^TiGeRShArK^
12-12-2006, 19:20
Non avevo notato ke lo catchavi tu l'ouput :D
Così direi che funge senza problemi ;)
Oceans11
12-12-2006, 19:22
ops...sono arrivato in ritardo!
[Commento personale]
per la miseria che razza di geniacci ci stanno in giro!! :D
siete...Titanici!!!!!
grazie di tutto!
[/Commento personale]
^TiGeRShArK^
12-12-2006, 19:28
io è più di una mezz'oretta che mi sbatto su google!!! :rolleyes:
ma trovo solo esecuzione di cmd con parametri (es: "cmd /C dir"), che cmq non funzionano!
PS: stai entrando anche tu nella lista dei miei miti!!!! :D
Per i tuoi scopi direi ke la osluzione di PGI va + ke bene..
cmq ti consiglio vivamente di leggere l'interessante articolo su java world che spiega un bel pò di cose e ti può aiutare nel caso in cui devi utilizzare cose un pò + avanzate dalla linea di comando ;)
Oceans11
13-12-2006, 12:56
per aprire la finestra del prompt del dos, in windows, la sequenza di stringhe è "cmd", "/C", "start"
funziona alla grande!!grazie a entrambi!
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.