Java-Programm neustarten lassen

  • Themenstarter Themenstarter Latur
  • Beginndatum Beginndatum
L

Latur

Gast
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 🙂
 
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?
 
Zuletzt bearbeitet:
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.
 
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.
 
In diesem .bat soltte ja ungefähr drinstehen:
java -jar meinProgramm.jar
oder?

Denn das habe ich gemacht und es passiert nix...
 
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?
 
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.
 
ok die methode, die den neustart macht:

Java:
    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();
        
    }
 
Probier mal:

Java:
    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

Code:
@ECHO OFF
ping 127.0.0.1 -n 6 -w 1000 > nul
java -jar meinProgramm.jar
 
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:
Code:
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
 
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"...
 

Neue Themen


Zurück
Oben