MS-DOS-Befehle ausführen

Status
Nicht offen für weitere Antworten.

Reality

Top Contributor
Hi,
ich möchte ein kleines Netzwerktool basteln und ich habe mich ein bisschen informiert, wie man MS-DOS-Befehle über JAVA ausführen kann.
Hab da auch was gefunden:
Code:
import java.io.*;

public class StartKlasse {
  public static void main(String[] args) {
  try{
  Process proc = Runtime.getRuntime().exec("cmd /c dir");
  BufferedReader in=new BufferedReader(new InputStreamReader (proc.getInputStream()));
  while(in.readLine()!=null){
  System.out.println(in.readLine());
  }
  }catch(Exception e){
  e.printStackTrace();
  }
  }
}

Ist jetzt nicht das Original, aber es geht. Wenn ich jetzt statt /c dir z.B. ipconfig eingebe oder format a:, dann öffnet sich nur das DOS-Fenster und das war´s auch schon.

Weiss jemand, wo der Fehler liegt?

Liebe Grüße
Reality
 
lass das "cmd" weg und gib nur den befehl an also exec("format a;");
da dieser befehl direkt darauf zugreift ändert das nix. und be ider while schleife solltest du warten bis readLine -1 ist anstelle von null
 
Hi,
dieser Code geht nicht:
Code:
  Process proc = Runtime.getRuntime().exec("format a:");
  BufferedReader in=new BufferedReader(new InputStreamReader (proc.getInputStream()));
  while(in.readLine()-1){
  System.out.println(in.readLine());
Wenn ich nur in Process proc = Runtime.getRuntime().exec("format a:"); verändere, kommt folgende Fehlermdeldung:
Code:
ava.io.IOException: CreateProcess: format a: error=2
	at java.lang.Win32Process.create(Native Method)
	at java.lang.Win32Process.<init>(Win32Process.java:66)
	at java.lang.Runtime.execInternal(Native Method)
	at java.lang.Runtime.exec(Runtime.java:551)
	at java.lang.Runtime.exec(Runtime.java:418)
	at java.lang.Runtime.exec(Runtime.java:361)
	at java.lang.Runtime.exec(Runtime.java:325)
	at StartKlasse.main(StartKlasse.java:6)

Wenn ich auch noch die While-Schleife verändere:
Code:
"StartKlasse.java": Fehler #: 375 : Operator - kann nicht auf (java.lang.String, int) angewandt werden in Zeile 8, Spalte 22

Liebe Grüße
Reality
 
*handvorkopfschlag*

while(in.readLine() != -1) vielleicht ?
und warum das nicht geht weiß ich nicht. liegt wohl an windoof

und hast du es schon mit "dir" ausprobiert?
 
also ich hab das z.b. so und es funktioniert:

Code:
// aus meinem programm
// command == "C:\\einprogramm.exe";
	     try {
	        Process p = Runtime.getRuntime().exec(command);
	        InputStream is = p.getInputStream();
	int c;
	while((c = is.read()) != -1) {
	// does nothing
// oder
System.out.print((char) c );
	}
	     }catch(Exception ex) { 
	     JOptionPane.showMessageDialog(this,"Could not start program "+command+"!\nProgram or shell command \"" +command+"\" not found.\nError caused by: "+ex.getMessage(),"Error", JOptionPane.ERROR_MESSAGE);
	     }

darum hatte ich auch -1 im kopf, sorry

edit: hmm komisch. Dos Kommandos gehen nicht, aber wenn command == "java -h"; dann funktioniert es.
 
Roar hat gesagt.:
*handvorkopfschlag*

while(in.readLine() != -1) vielleicht ?
und warum das nicht geht weiß ich nicht. liegt wohl an windoof

und hast du es schon mit "dir" ausprobiert?
Code:
readLine

public String readLine()
                throws IOException

    Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed.

Returns:
A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached

Also nix mit -1 !!
 
grtml hab ich doch gesagt oben, weil ich in meinem code zeichenweise gelesen hab
 
Hi,
dein Code funktioniert jetzt. Macht im Grunde genommen nichts anderes als mein alter Code.
Frage: Die Schleife macht es solange, bis int den Wert -1 erreicht hat. Wieso erreicht int überhaupt den Wert -1? ???:L

Liebe Grüße
Reality

PS: Ja, viele Konsolenbefehle gehen immernoch nicht.
 
hm komisch dasses nicht geht ???:L
die read() methode gibt einen integer zurück der den ascii wert darstellt. und wenn nix mehr da ist zum lesen gibt read() halt -1 zurück.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben