CMD aufrufen und aktuellen pfad ändern

sandaime

Mitglied
Hallo,
ich schreibe ein Programm, was gleichzeitig meine Bachelorarbeit wird. Für das konsolengesteurte Programm Austal2000 erstelle ich eine GUI. Nun habe ich die GUI nahezu fertig und muss lediglich noch das Programm starten. Für den Start muss ich CMD aufrufen dort den Pfad in den Ordner setzen wo austal.exe ist und anschließen eine Eingabe tätigen. Die Eingabe sieht wie folgt aus C:\a2k\austal2000 "Projektname" und danach startet das Programm. Nun zu meinem Problem. Die Pfade habe ich abgesichert und kann auf die zugreifen jedoch kann ich diese nicht an CMD übergeben. Ich starte CMD mit Runtime.getRuntime(), aber wie nehme ich im CMD eingaben vor?
Code:
try {
                Process p = Runtime.getRuntime().exec("cmd /C start");
       
                //will diese gespliteten Pfad als erstes eingeben, damit sich der Pfad von CMD
                //ändert
                String[] geteilterPfad = austalPfad.split("austal2000.exe",2);
                //Dies ist nur zum prüfen ob der split geklappt hat
                System.out.println(geteilterPfad[0]+ " Eingabe für das ändern des pfades");
                //Wenn der pfad geändert ist will ich den Projektnamen übergeben und "austal2000"
                //schreiben lassen und diese eingebe bestätigen
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }


Für jede Hilfe wäre ich sehr dankbar ich bin kurz vor dem Ende und das ist wichtig wegen meiner Bachelorarbeit :) danke an diese super community
 

JCODA

Top Contributor
Du könntest die Konsole statt mit "cmd /C start" mit wiefolgt starten:
Java:
Process p = Runtime.getRuntime().exec("cmd /K \"cd /d c:\\Programme\\ \"");

Ich bin mir aber nicht sicher, ob das das ist, was du möchtest.
ggf. kannst du auch im nachhinein mit cd Pfad
deinen Pfad ändern.

Warum überhaupt per CMD-Konsole und nicht direkt das Programm per Java starten?
 

JCODA

Top Contributor
Hilft dir vielleicht folgendes?
Java:
import java.io.IOException;
import java.io.OutputStream;


public class Blub {

    public static void main(String[] args) throws IOException, InterruptedException {
         Process p = Runtime.getRuntime().exec("cmd"); //Ohne sichtbares Fenster
         OutputStream out = p.getOutputStream();
         out.write("cd D:\n".getBytes());//Ordner wechseln
         out.flush();
         out.write("dir\n".getBytes());//Befehl ausführen
         out.flush();
        
         while(true){//Auf Antwort warten...
             Thread.sleep(1000);
             byte buff [] = new byte[1000];
            
             if(p.getInputStream().read(buff) > 0){
                 System.out.println(new String(buff));
             }
            
         }
        
    }

}

Ich kenne mich damit nicht wirklich aus, ist nur so dahingetippt.
 

sandaime

Mitglied
Jeder Tipp ist ein Weg zum Ziel :D danke ich werde mich mal bisschen in TryError versuchen :D Halte dich auf dem laufenden und für andere Tipps bin ich weiterhin offen :)
 

Meniskusschaden

Top Contributor
Ich würde mir auch mal die Klasse ProcessBuilder ansehen. Das scheint gegenüber Runtime.getRuntime().exec()die modernere Variante zu sein, um externe Programme zu starten. Da gibt es auch eine Methode, um das Arbeitsverzeichnis zu setzen. Vielleicht geht es damit komfortabler.
 

sandaime

Mitglied
Hallo,
ich habe die Lösung gefunden. Mit einem Processbuilder habe ich es gelöst. Zurzeit gebe ich es nur inder Java Konsole aus, aber als nächstes werde ich es in einer TextArea ausgeben, damit alles sichtbar für den User ist.

Code:
ProcessBuilder builder = new ProcessBuilder("cmd.exe", "/c", "cd \"C:\\a2k\" && austal2000 testprojekt");
        builder.redirectErrorStream(true);
        Process p = null;
        try {
            p = builder.start();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;
        while (true) {
            try {
                line = r.readLine();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            if (line == null) {
                break;
            }
            System.out.println(line);
        }
 

mrBrown

Super-Moderator
Mitarbeiter
Du kannst auch einfach mit #directory das Arbeitsverzeichnis setzte, ist imho der elegantere Weg.
Außerdem kannst du dir den Weg über cmd dann sparen (oder muss das bei Windows so?), und dein Programm direkt starten.

Dein ExceptionHandling ist auch etwas suboptimal...
Wirft builder.start(), fängst du die zwar, bekommst aber direkt danach eine NPE, weil p nie initialisiert wurde ;)
 

sandaime

Mitglied
Das ist die Version, was ich als Grundlage habe. Ich muss diese noch weiter anpassen.
Das Programm wird in der Konsole gestartet und dort sieht man in prozent wie weit die Rechnung ist.

#direcetory kann ich leider nicht direkt setzen, weil der User den Ordner überall hinstellen könnte worin die austal2000.exe ist, aber das Fange ich mit einer Configdatei ab, worin der Pfad drinnen ist. Also muss ich erst in die Directory wechseln worin die "Austal2000.exe" ist. In diesem Pfad befindet sich dann das Projektordner vom User. Im zweiten Schritt muss folgender Befehl rein "Austal2000 "projektname"" --> Programm startet.

Ich hoffe ich konnte halbwegs erzählen, welche schritte erstellt müssen.

Falls Ihr Ideen habt immer gerne. Ich lehne keine Idee ab :) danke nochmals an alle die kommentiert haben
 

mrBrown

Super-Moderator
Mitarbeiter
#direcetory kann ich leider nicht direkt setzen, weil der User den Ordner überall hinstellen könnte worin die austal2000.exe ist, aber das Fange ich mit einer Configdatei ab, worin der Pfad drinnen ist. Also muss ich erst in die Directory wechseln worin die "Austal2000.exe" ist. In diesem Pfad befindet sich dann das Projektordner vom User. Im zweiten Schritt muss folgender Befehl rein "Austal2000 "projektname"" --> Programm startet.

Und was sollte das ändern?
Der #directory-Aufruf käme nach new ProcessBuilder, also an einer Stelle, wo du den Pfad schon kennen musst.
Wenn du's mit #directory machst, kannst du dir dann CMD sparen und cd sparen, und dein command reduziert sich auf den wirklichen Start deiner exe, und der Rest kann wegfallen -> es wird übersichtlicher und leserlicher ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C jar File mehrfach aufrufen (als Windows Dienst) Allgemeine Java-Themen 5
J Aus JavaProgramm Setup Exe aufrufen Allgemeine Java-Themen 9
E Variablen Nach Übergabe einer Variable den Constructor aufrufen Allgemeine Java-Themen 16
F Getter Methode aufrufen funktioniert nicht Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Lambda Expression in einer Methode execute() aufrufen (execute() ist eine Methode aus dem funktionalen Interface Command) Allgemeine Java-Themen 5
Lukasbsc JDA-Bot Webseite aufrufen Allgemeine Java-Themen 0
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
L Methoden Über Reflections eine Methode mit aufrufen Allgemeine Java-Themen 3
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
L Mehrere .Jar Files aufrufen Allgemeine Java-Themen 9
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
P Methode aus anderem Paket aufrufen Allgemeine Java-Themen 1
B Klassen Objekt erzeugen und Konstruktor aufrufen - Welche Lösung ist besser? Allgemeine Java-Themen 2
J Überschriebene Funktion soll nicht die super Funktion aufrufen Allgemeine Java-Themen 4
S Methoden Liste soll Methode aus innerer Klasse aufrufen Allgemeine Java-Themen 4
Javafan01 Website in Java aufrufen Allgemeine Java-Themen 1
C php-Website mit Proxy aufrufen Allgemeine Java-Themen 6
L sortiertes Array im main aufrufen klappt nicht. Allgemeine Java-Themen 3
C Dateien in Jar aufrufen Allgemeine Java-Themen 14
J OpenOffice Makro aufrufen Allgemeine Java-Themen 2
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
Ananaskirsche Website mit Browser-Check aufrufen Allgemeine Java-Themen 8
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
S Überschriebene Methode der Oberklasse der Oberklasse aufrufen. Allgemeine Java-Themen 5
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
D VBScript in .jar einbinden und aufrufen Allgemeine Java-Themen 5
J Console aufrufen Allgemeine Java-Themen 1
F In OSX: Java-Programm über URI-Scheme aufrufen mit Parameter? Allgemeine Java-Themen 0
A Funktionen aufrufen nach Schema x Allgemeine Java-Themen 2
B Datei innerhalb des JARs von einer statischen Methode aufrufen Allgemeine Java-Themen 4
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
D Eclipse Methode einer anderen Klasse aufrufen Allgemeine Java-Themen 14
E Aus MainActivity SubActivity aufrufen, von dort Methode in MainActivity aufrufen Allgemeine Java-Themen 3
B Benutzeroberfläche in anderer Klasse aufrufen Allgemeine Java-Themen 5
Y Applet/Html - Wie Java-Methode aufrufen, die einen Parameter erwartet? Allgemeine Java-Themen 3
K JNI: Methoden aus unterschiedlichen Threads aufrufen Allgemeine Java-Themen 3
J java-applikation-1.jar soll java-applikation-2 aufrufen.jar Allgemeine Java-Themen 5
B exe-Datei aufrufen und dort Konsoleneingaben machen Allgemeine Java-Themen 2
R Servelt mit <form action=""> aufrufen (.jsp) Allgemeine Java-Themen 7
T Methoden per String-Namen aufrufen Allgemeine Java-Themen 2
S ArrayList<Line2D> mit g2d.draw() aufrufen Allgemeine Java-Themen 27
C Mehothode in anderenm Thread aufrufen Allgemeine Java-Themen 10
C Applet per Greasemonkey aufrufen Allgemeine Java-Themen 9
E Methode schützen vor nochmaligen Aufrufen Allgemeine Java-Themen 4
C Abstrakte Klasse soll Methode aus Unterklasse aufrufen Allgemeine Java-Themen 3
R synchronized methode rekursiv aufrufen Allgemeine Java-Themen 5
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
X Action in Action aufrufen Allgemeine Java-Themen 2
G super- Methode aufrufen Allgemeine Java-Themen 21
F Anderes Java-Programm aufrufen Allgemeine Java-Themen 2
S Überschriebene Methode eines generischen Typen aufrufen Allgemeine Java-Themen 4
R Exe datei aufrufen Allgemeine Java-Themen 6
T Webservice definieren und andere Webservice aufrufen Allgemeine Java-Themen 8
K Java Konstruktoren beim Initialisieren aufrufen Allgemeine Java-Themen 10
A HTML-Seite aufrufen, drucken und zum Programm zurückkehren Allgemeine Java-Themen 2
V linuxprogramm unter java aufrufen??? Allgemeine Java-Themen 4
C JTextComponent - mit Schlagwörter Funktion aufrufen Allgemeine Java-Themen 2
P Copy-Constructor aufrufen - Wie ??? Allgemeine Java-Themen 3
A monitoren von Methoden Aufrufen Allgemeine Java-Themen 3
SuperSeppel13 php-funktion aufrufen Allgemeine Java-Themen 5
thE_29 Generic Methoden die sich aufrufen wollen nicht immer Allgemeine Java-Themen 12
J Methode mit HttpClient aufrufen Allgemeine Java-Themen 5
B Linux: Bash von Java aus aufrufen Allgemeine Java-Themen 10
0 Methode von Basisklasse aufrufen Allgemeine Java-Themen 10
J Setter mittels invoice aufrufen Allgemeine Java-Themen 4
S Perl Skript über Java aufrufen Allgemeine Java-Themen 10
Chris81T Apache FOP 0.20-5 mit JNI von C++ Code aufrufen Allgemeine Java-Themen 8
Chris81T JNI: Java Methoden von C++ Code aufrufen Allgemeine Java-Themen 8
K JUnit: Tests über ant aufrufen Allgemeine Java-Themen 2
E textdatei über "öffnen mit" aufrufen Allgemeine Java-Themen 6
G Funktion aus array aufrufen Allgemeine Java-Themen 16
M Methode vor dem Schließen aufrufen Allgemeine Java-Themen 4
Z Seiten nacheinander aufrufen (Wichtig :) Allgemeine Java-Themen 10
K Funktion unabhängig vom Namen aufrufen Allgemeine Java-Themen 5
G Java Klasse in einem anderen Verzeichnis aufrufen Allgemeine Java-Themen 3
sparrow Ant build-files rekursiv aus ant aufrufen Allgemeine Java-Themen 3
G Ant von Java aufrufen Allgemeine Java-Themen 2
E WinRar aus Java aufrufen Allgemeine Java-Themen 10
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
R EXE, die in einem JAR liegt, aufrufen Allgemeine Java-Themen 3
G python scripte aus java aufrufen Allgemeine Java-Themen 2
P pythonscripte aus java aufrufen, probleme mit berechtigungen Allgemeine Java-Themen 3
E externe Anwendung aufrufen und sich selbst beenden Allgemeine Java-Themen 8
G KeyListener: Wiederholtes Aufrufen von KeyPressed verhindern Allgemeine Java-Themen 3
MQue Methoden in verschiedenen Klassen aufrufen Allgemeine Java-Themen 21
S Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink Allgemeine Java-Themen 2
K Servlet im Browser aufrufen Allgemeine Java-Themen 3
MQue Methode aus run() aufrufen bzw. implementieren Allgemeine Java-Themen 5
E paintComponent() aufrufen Allgemeine Java-Themen 2
H Variablen (A1, A2, A3 mit A_irgendetwas aufrufen) ohne Array Allgemeine Java-Themen 5
G Syntax-Fehler beim aufrufen von generischen Klassenmethoden Allgemeine Java-Themen 4
C Methoden mit variabler Parameteranzahl aufrufen Allgemeine Java-Themen 9
M jni Spezialfall: java-erzeugte dll in java aufrufen Allgemeine Java-Themen 6
K überschriebene Methode von Vor-Vorfahren aufrufen Allgemeine Java-Themen 6
I Servlet von einem Swing Based GUI aufrufen Allgemeine Java-Themen 5
A Programm beim Hochfahren des Betriebsystems aufrufen Allgemeine Java-Themen 3
A in patterns funktionen aufrufen Allgemeine Java-Themen 3
A Objektmethode aus Konstruktor aufrufen? Allgemeine Java-Themen 14

Ähnliche Java Themen

Neue Themen


Oben