# Java-Programm neustarten lassen



## Latur (17. Aug 2010)

Hallo liebe Java-Programmierer  

Ich hab hier ein kleines Problem, mit dem Projekt, an dem ich gerade arbeite und zwar....

Einige Einstellungen des Programms werden erst nach einem Neustart aktiv (Liegt an einer Config-Struktur mit Java3D [war nicht von mir ]) jedenfalls könnte man das Problem einfach beheben, wenn ich dem User einen Button anbieten könnte, mit dem man bequem das Programm neustarten kann.

Gibt es irgendeine Möglichkeit in Java ein Programm neustarten zu lassen?

Vielen Dank für eure  Antworten


----------



## AmunRa (17. Aug 2010)

Händisch die Main Methode noch einmal aufrufen, 

ist zwar nicht sehr elegant und ich würde es dir auch nicht empfehlen.

Kannst du das nicht selbst ein bisschen umschreiben?


----------



## Latur (17. Aug 2010)

Nein leider nicht, habe ich schon probiert, aber das Programm ist nicht gut ausdokumentiert, außerdem ist es noch neu für mich mit einem so "riesigen" (für meine Verhältnise) Projek zu arbeiten... alles klar, ich werd es mal probieren.


----------



## Gast2 (17. Aug 2010)

AmunRa hat gesagt.:


> Händisch die Main Methode noch einmal aufrufen,
> 
> ist zwar nicht sehr elegant und ich würde es dir auch nicht empfehlen.



Das wird auch nicht helfen. Wenn z.B. einige Klassen als Singelton implementiert sind musst du schon die ganze VM beenden und neustarten damit eine neue Instanz angelegt werden kann. 

Was du machen kannst ist per runtime.exec ein Skript aufrufen und dann mit System.exit() das Programm beenden. Das Skript wartet z.B. 5 Sekunden startet dann das Programm wieder.


----------



## Latur (18. Aug 2010)

In diesem .bat soltte ja ungefähr drinstehen:
java -jar meinProgramm.jar      
oder?

Denn das habe ich gemacht und es passiert nix...


----------



## Latur (18. Aug 2010)

Ok ich habe jetzt geschafft, das ich das Programm mit einem externen .bat file wieder aufrufe, allerdings
ist das neue Programm (das Fenster) wie tot, man kann nix mehr drücken oder beenden.

wie schreib ich dieses.bat file besser?


----------



## AmunRa (18. Aug 2010)

Dazu müsste man das BAt file erstmal sehen.


----------



## Latur (19. Aug 2010)

java -jar meinProgramm.jar



mehr steht nicht drin.


----------



## Gast2 (19. Aug 2010)

Und der Code um den Aufruf drumrum?

Also das Runtime.exec()?

Mir fehlt zumindest schon mal ein Sleep in der .bat. Wenn die alte Application noch läuft und evtl z.B. Configfiles geloggt hält wird die neue Application  nicht einwandfrei funktionieren.


----------



## Latur (19. Aug 2010)

ok die methode, die den neustart macht:


```
public void reload()    {
        this.setVisible(false);
        ConfigurationFile.setHomeDir();
        saveConfigurations();

        try {
            new ProcessBuilder("start.bat").start();
            

        } catch (IOException ex) {
            System.err.println("Can not find .bat file in dist folder");
        } 

        this.dispose();
        
    }
```


----------



## Gast2 (19. Aug 2010)

Probier mal:


```
public void reload()    {
        this.setVisible(false);
        ConfigurationFile.setHomeDir();
        saveConfigurations();
        try {
            new ProcessBuilder("start.bat").start();
            System.exit(0); // Japp die ganze VM beenden...
        } catch (IOException ex) {
            System.err.println("Can not find .bat file in dist folder");
        } 
    }
```

Und in die .bat


```
@ECHO OFF
ping 127.0.0.1 -n 6 -w 1000 > nul
java -jar meinProgramm.jar
```


----------



## Latur (20. Aug 2010)

Vielen vielen Dank 

Es hat funktioniert 

Eine Frage hätte ich, weil ich will ja schließlich verstehen, was die bat macht und zwar die Zeile:

```
ping 127.0.0.1 -n 6 -w 1000 > nul
```

ich mein am Anfang versteh ich es noch, er pingt sich selbst, und wartet eine Sekunde richtig? Aber der Rest?

Nochmal vielen Dank für die Hilfe


----------



## Cerveza (20. Aug 2010)

Er pingt sich 6 mal selbst in Abständen von 1000ms und leitet die Ausgabe nach nul. Sprich man sieht die Ausgabe nicht.

Gruß
Cerveza


----------



## Latur (20. Aug 2010)

Ok vielen Dank für eure Hilfe, funktioniert alles wieder


----------



## Gast2 (20. Aug 2010)

Cerveza hat gesagt.:


> Er pingt sich 6 mal selbst in Abständen von 1000ms und leitet die Ausgabe nach nul. Sprich man sieht die Ausgabe nicht.




Um es kurz zu erläutern - es gibt zwar im Windows Ressource Kit Befehle wie WAIT und SLEEP, aber die sind nicht standardmäßig auf jedem Windows installiert. Mit dem "ping"-Trick simuliert man halt ein "Warte 6 Sekunden"...


----------

