ProcessBuilder

IroNHeinZ

Grünschnabel
Moinsen,

ich hab mal wieder ein lüttes Problem.
Ich habe einen ProcessBuilder:

Code:
new ProcessBuilder("cmd", "/K", "server.bat").start();

er öffnet mir aber leider nicht die AEingabeaufforderung, weshalb ich leider nicht gucken kann, was an dem Pfad den ich angegeben habe falsch ist. Er führt Befehle in der Kommandoeingabe aus (BSP.: wenn ich Notepad über ProcessBuilder("cmd", "/K", "notepad") starte macht er das auch), aber leider meine Server.bat nicht...jetzt will ich halt sehen, was an meinem Pfad falsch ist, aber leider ist die Kommandozeile unsichtbar :(:(:(

Wenn jemand eine Idee hat, woran das liegt, bitte schreibt

Mit den besten Grüßen
IroNHeinZ

Ps:
Ich weiß, dass das eig keine Java-Grundlagen sind, aber ich weiß nicht ich das sonst hinpacken könnte ;)
 
Moin,

Wenn jemand eine Idee hat, woran das liegt, bitte schreibt

ich vermute mal an deiner fehlerhaften bat - Datei. Er versucht sie auszuführen, läuft aber auf einen Fehler und macht das Fenster direkt wieder zu, da ja nix mehr zu tun ist.

Füg doch mal am Ende der bat ein PAUSE-Befehl ein, dann bleibt das Konsolenfenster auf, bis du eine Taste drückst.

hth
THMD
 
ganz so blöd bin ich auch nicht ;)

ne...die batch datei lässt sich fehlerfrei ausführen, wenn ich es nicht von java aus mache...auch der Pause befehl bringt nichts.

Das "/K" bewirkt ja auch normalerweise, dass er das anzeigen der cmd-Zeile erzwingt, aber das macht er nicht :(
 
Hellas!

Also folgendes hat bei mir funktioniert:

Java:
    public static void main(String[] args) {
        
        try {
            Runtime.getRuntime().exec("C:\\Temp\\test.bat");
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

ganz so blöd bin ich auch nicht ;)
Tschuldigung.

Als Alternative zu Billie's Variante kannst du dir auch von dem durch new ProcessBuilder.start() erzeugten Process-Object den ErrorStream ausgeben. Dort sollte die Fehlermeldung drinstehen.

Also ungefähr so:
Java:
Process p = new ProcessBuilder("cmd","/c","was_auch_immer.bat"),start();
InputStream es = p.getErrorStream();
InputStreamReader ir = new InputStreamReader(es);

char[] buf = new char[1024];
int i=0;
StringBuilder builder = new StringBuilder();
while((i=ir.read(buf))!=-1){
   builder.append(buf,0,i);
}
System.out.println(builder);

Dabei starte ich in dem Beispiel die Console aber mit /c, damit er sie auch schliesst, Ansonsten würde sich die while-Schleife totlaufen, da die Konsole (mit /k) am Leben gehalten wird und die Streams noch Daten bekommen könnten.

Grüße
THMD
 
Hallo,
finde dein beitrag super ist auch genau das was ich brauche um weiter arbeiten zu können muss damit bischen herum experementieren um wissen zu können wie das eigentlich funktioniert.

Meine frage: ist diese form so wie sie ist auch Plattform unabhängig ohne die .bat.
bsp:
Process p = new ProcessBuilder("test.sql"),start();

ich möchte automatisiert eine z.b sql ausführen auf SOLARIS,IBM AIX unix .........
würde das so klappen auf allen systemen

danke
 
Hallo,

die Java-Befehle sind plattform-unabhängig.
Nur das was du übergibst ist plattform-abhängig, da du ja Befehle auf dem System ausführst.

Beispielsweise werden bei Windows Befehle von der cmd ausgeführt, deshalb muss man die auch angeben
Code:
cmd /c

Bei Linux werden die Befehle von der Bash ausgeführt.
Code:
/bin/bash

Was du machen könntest wäre eine Klasse, die Befehle ausführt, wie oben beschrieben, dann müsstest du nur noch den String der übergeben wird setzen, je nach dem auf welchem Betriebssystem du dich befindest.

Gruß

Sascha
 
Super danke dir vielmals

kann also beruhigt an die sache so ran gehen .
Nochmal danke und schönen sonntag noch.
 
Zurück