# Batchdatei wird nicht ausgeführt (Keine Fehlermeldung)



## uweb95 (26. August 2013)

Hi, ich möchte in einem Java Programm eine batch Datei ausführen, mit der ich wiederum eine .jar Datei ausführe.
Allerdings passiert bei mir nichts, es wird nicht mal eine Fehlermeldung aus gegeben!

Code in der Batch Datei:

```
java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
```

Code zum Ausführen:

```
try{    
        ProcessBuilder processBuilder = new ProcessBuilder(System.getenv("appdata") + "/ServerManager/HierServerEinfügen/vanilla.bat");
        
        
        Process process = processBuilder.start();
        
               process.waitFor();
               
        }
        catch (Exception e){
           System.out.println("Fehler");
        }
```

der Pfad der "vanilla.bat" ist "C:\Users\owner\AppData\Roaming\ServerManager\HierServerEinfügen\vanilla.bat"
Vieleicht kennt auch jemand einen Weg wie man eine .jar Datei direkt mit Java ausführen kann, denn wenn ich statt "vanilla.bat", "minecraft_server.jar" eingebe kommt "CreateProcess error=193, %1 ist keine zulässige Win32-Anwendung"


----------



## hendl (26. August 2013)

Hi

Du könntest ihn so starten

```
Process pro=Runtime.getRuntime().exec("cmd /c start "+ System.getenv("appdata") + "/ServerManager/HierServerEinfügen/vanilla.bat");
```

Edit 
Was mir jetzt gerade erst einfällt 
Du kannst natürlich die jar auch direkt starten per java -jar

```
Process pro=Runtime.getRuntime().exec("java -jar "+ System.getenv("appdata") + "/ServerManager/HierServerEinfügen/minecraft_server.jar");
```
Lg hendl


----------



## uweb95 (27. August 2013)

ok, werde es aber erst morgen ausprobieren, hab gerade meinen Pc neu aufgesetzt und muss NetBeans neu installieren!

und wie muss ich das dann einfügen?
so:

```
private void startActionPerformed(java.awt.event.ActionEvent evt) {                                      
        Process pro=Runtime.getRuntime().exec("java -jar System.getenv("appdata") + "/ServerManager/HierServerEinfügen/minecraft_server.jar"");
    }
```
funktioniert es nicht, da sagt die IDE, dass 1 geschlossene Klammer und 2 Semikolon fehlen und "not a statement"!


----------



## Bratkartoffel (27. August 2013)

Hi,

der Codeausschnitt von hendl war nicht ganz richtig, hier haben sich ein paar kleinere Fehler eingeschlichen. Sollten aber nicht so schwer zu erkennen und beheben sein?


```
private void startActionPerformed(ActionEvent evt) {
    String cmd = "java -jar " + System.getenv("appdata")
        + "/ServerManager/HierServerEinfügen/minecraft_server.jar";
    Process pro = Runtime.getRuntime().exec(cmd);
}
```

Grüße,
BK


----------



## uweb95 (27. August 2013)

wenn ich den Code ausführe passiert: nichts...
allerdings war Zeile 4 rot unterstrichen und als Lösungsvorschlag gab es nur die Möglichkeit einen try-catch Block einzufügen, was ich auch gemacht habe!

```
try {
            String cmd = "java -jar " + System.getenv("appdata")
            + "/ServerManager/HierServerEinfügen/minecraft_server.jar";
            Process pro = Runtime.getRuntime().exec(cmd);
        } catch (IOException ex) {
            Logger.getLogger(Hauptfenster.class.getName()).log(Level.SEVERE, null, ex);
        }
```


----------



## Der Wolf (27. August 2013)

Hallo,

was erwartest du eigentlich was da passieren soll? Started denn beim Minecraft-Server automatisch eine GUI oder ähnliches? Die Meldungen auf der Konsole, die du sehen würdest, wenn du den Server manuell startest wirst du so nicht sehen, dann die Meldungen, glaube ich, an Streams Instanzen deines Objekts "pro" geleitet werden.

Gruß,
Wolf


----------



## Bratkartoffel (27. August 2013)

Hi,

ausserdem gibts dann im Serververzeichnis noch eine server.log in der Fehlermeldungen protokolliert werden.

Grüße,
BK


----------



## uweb95 (27. August 2013)

Der Wolf hat gesagt.:


> Hallo,
> 
> was erwartest du eigentlich was da passieren soll? Started denn beim Minecraft-Server automatisch eine GUI oder ähnliches? Die Meldungen auf der Konsole, die du sehen würdest, wenn du den Server manuell startest wirst du so nicht sehen, dann die Meldungen, glaube ich, an Streams Instanzen deines Objekts "pro" geleitet werden.
> 
> ...


Ja, beim Vanilla Server startet eine Gui, außer man macht es über eine batch datei, bei der am ende "nogui" steht! (Beim Bukkit startet keine gui, ich habe allerdings Vanilla genommen!)



Bratkartoffel hat gesagt.:


> Hi,
> 
> ausserdem gibts dann im Serververzeichnis noch eine server.log in der Fehlermeldungen protokolliert werden.
> 
> ...



Das Problem ist ja, der Server wird nicht mal gestartet!


----------



## Der Wolf (27. August 2013)

Schonmal ein 


```
System.out.println(cmd);
```

gemacht. Die Ausgabe-Zeile kopiert und dann in die Kommando-Zeile eingegeben? Started der Server mit der kopierten Ausgabe?

Gruß,
Wolf


----------



## deepthroat (27. August 2013)

Hi.

Das Kommando-aus-String-Zusammengebastel sollte man lieber vermeiden. Unter Windows gibt es da ganz häßliche Quoting Regeln - zumal Java den übergebenen String daraufhin wieder mit einem StringTokenizer zerlegen muss; man kann es einfacher  und kürzer auch ganz einfach so machen:

```
Process pro = new ProcessBuilder("java", "-jar",
   System.getenv("appdata") + "/ServerManager/HierServerEinfügen/minecraft_server.jar" ).start();
```
Dafür muss natürlich "java.exe" im PATH sein.

Was ist denn der Wert von pro.waitFor()?

Und lies mal die stdout und stderr Ausgabe aus.


----------



## uweb95 (27. August 2013)

Hat wunderbar funktioniert (obwohl ich Java nicht in der PATH hab, hab da nur nVidia drinnen) 
Thx

Jetzt muss ich nur noch wissen, wie ich es beende (beim Starten öffnet sich ne GUI bei der eine Konsole eingebaut ist, in diese müsste ich "stop" eingeben damit das Programm beendet)

ich weis schon, dass man das "abbrechen" des Programms mit "Runtime.getRuntime().exec()" und "destroy()" erreichen kann, allerdings nicht, wie ich es einsetzten soll!

ist es irgendwie möglich den "stop" befehl an der externe Programm weiter zu leiten?

(im Anhang: externes Programm, dahinter mein Programm)


----------

