Ausführen von CMD Befehlen

Hallo,
ich möchte in meinem Programm eine HTML Datei öffnen. Unter Linux funktioniert der Befehl wunderbar:
Java:
Runtime.getRuntime().exec( <Befehl> );
In Windows möche ich das auch machen:
Java:
Runtime.getRuntime().exec("start " + pathname + filename);
Wenn ichs mir im Debugging anschaue, dann siehts so aus:
"start C:/Users/Tommy/Comunio/Comunio_Kader.html"
Der Befehl funktioniert manuell in der CMD, bei Java bekomme ich aber einen Fehler:
Exception in thread "main" java.io.IOException: Cannot run program "start": CreateProcess error=2, Das System kann die angegebene Datei nicht finden
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at java.lang.Runtime.exec(Runtime.java:620)
at java.lang.Runtime.exec(Runtime.java:450)
at java.lang.Runtime.exec(Runtime.java:347)
at comuniomonitor.ComunioMonitor.writeTable(ComunioMonitor.java:352)
at comuniomonitor.ComunioMonitor.main(ComunioMonitor.java:77)
Caused by: java.io.IOException: CreateProcess error=2, Das System kann die angegebene Datei nicht finden
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(ProcessImpl.java:386)
at java.lang.ProcessImpl.start(ProcessImpl.java:137)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 5 more
Kann mir jemand helfen?
 
Wenn du den "Default-Browser" öffnen willst kannst du nicht nur "start" schreiben. Du musst noch ein "cmd /c " davor setzen.
Für eine Browser deiner Wahl schreib einfach "browsername.exe File".

Also als kleines Beispiel:

Java:
Runtime.getRuntime().exec("cmd /c start D:Mein/Pfad/Zu/Der/Seite/index.html");
Runtime.getRuntime().exec("chrome.exe D:/Mein/Pfad/Zu/Der/Seite/index.html");

Gruß Robert 🙂
 
Hallo, Ich habe diesen Beitrag gefunden, weil ich auch gern einige Programme mittels Java --> CMD steuern möchte. Dazu habe ich den Code genutzt und ihn in eine Klasse gepackt. Aus dieser möchte ich nun Objekte erzeugen und mit der Methode start() gern den cmd Befehl starten. Leider bekome ich in meiner Main einen Fehler, wenn ich start() ausführen möchte. Kann mi rjemand sagen, was ich vergessen hab?

Hier mein Main:
Java:
package Program;
import java.io.*;

public class Main {
    public static void main(String[] args)  {
        
        Functions.CMDcontroll c = new Functions.CMDcontroll();
        c.start();
        

    }
}


Und hier die Klasse für die CMDs:
Java:
package Functions;

import java.io.IOException;

public class CMDcontroll {
    private String program, param1, param2, param3, combinedString;
    
    
    public CMDcontroll(){
        combinedString = "cmd /c start";
        
    }
    
    public CMDcontroll(String prog, String p1, String p2, String p3){
        program = prog;
        param1 = p1;
        param1 = p2;
        param1 = p3;
        
        combinedString = prog +" "+ p1 +" "+ p2 +" "+ p3;
    }

    
    public void start() throws IOException ,InterruptedException{
        
        Runtime.getRuntime().exec(combinedString);
        //Runtime.getRuntime().exec("programm.exe Parameter1 Parameter2");
        
    }
}

bei c.start(); bekomme ich den Fehler:
Multiple markers at this line
- Unhandled exception type InterruptedException
- Unhandled exception type IOException

Leider kann ich den noch nicht wirklich interpretieren.
Grüße
 
Wenn eine Methode checked Exceptions hat, dann musst Du diese beim Aufruf entweder fangen oder die Methode, die den Aufruf macht, muss ebenfalls diese checked Exceptions werfen.

Also den Start Aufruf in try/catch verpacken oder der Main Methode noch das throws … geben.
 
Wenn eine Methode checked Exceptions hat, dann musst Du diese beim Aufruf entweder fangen oder die Methode, die den Aufruf macht, muss ebenfalls diese checked Exceptions werfen.

Also den Start Aufruf in try/catch verpacken oder der Main Methode noch das throws … geben.
Danke. Ich dachte, da ich throws bereits in der Klasse selbst hatt genügt das.
Wieder etwas dazu gelernt. DANKE
 
Wenn du damit eine Befehl zusammen setzen willst.
Dann sollte er einen StringJoiner bzw. String.join verwenden 🙂

Java:
combineString = String.join(" ", prog, p1, p2, p3);

Davon abgesehen, braucht es das im Zusammenhang mit Prozessen gar nicht. Wie @Robert Zenz angemerkt hat, bietet sich z. B. ProcessBuilder an:
Java:
ProcessBuilder pb = new ProcessBuilder(prog, p1, p2, p3);
 
Hier Überschreibtst du ja deinen String
Nur um hier keine Missverständnisse aufkommen zu lassen: Er überschreibt keinen String. Er hat zwei Konstruktoren und in jedem wird combinedString initialisiert. Es gibt aber nie ein Überschreiben des Wertes in combinedString, da entweder der eine oder der andere Konstruktor aufgerufen wird.
 

Neue Themen


Zurück
Oben