Implementierung Programmneustart

sheldon2.0

Mitglied
Hallo,

ich habe ein kleines Problem mit meinem Programm.
Es ist ein Spiel, dass zum Teil aus Singletons besteht.
Ich wollte gerade die Funktion "Neues Spiel" einbauen.

Habe in manchen Foren gelesen, dass sie dort vorschlagen, es mit dem ProcessBuilder zu versuchen. Von da aus ein Skript starten, welches anschließend die jar-Datei des Programms startet.

Nun, für Unix-Systeme habe ich das implementiert und alles läuft wie gewünscht. Der ProcessBuilder startet das Skript (welches ein paar Sekunden wartet und danach die jar-Datei aufruft) ... das aktuelle Programm wird mit System.exit beendet.

Nun habe ich ein batch Skript für Windows Systeme geschrieben und den ProcessBuilder lasse ich das batch Skript starten. Allerdings passiert nichts. Das Programm wird korrekt beendet. Jedoch wird das Programm nicht neugestartet. Wenn ich das Skript aus dem Terminal starte oder direkt aus dem Explorer, dann wird das Programm ganz korrekt neugestartet.

Irgendwie weiß ich nicht, wo das Problem liegt. Habt ihr eine Idee, warum das so nicht funktioniert?

Wäre euch sehr dankbar.
 
S

SlaterB

Gast
klappt es wenn du das erste Progamm nicht beendest?
bringt javaw statt java einen Unterschied?

allgemein sollte es doch wohl möglich sein, im eigenen Programm nochmal von vorne anfangen,
hast du dazu bestimmte Hindernisse, die vielleicht ausräumbar sind, oder interessiert dich diese Möglichkeit hier nicht?
 

sheldon2.0

Mitglied
hab mal gerade das System.exit(0) rausgenommen .... nun funktionierts ....

meine Hindernisse sind die Singletons ... die kann man ja schlecht zurücksetzen oder?
 

fastjack

Top Contributor
Na doch, mußt Du nur entsprechend implementieren/designen. Ich würde so etwas wie eine reset-Methode entwickeln, mit der sich das Spiel auf den Anfangszustand zurücksetzen läßt. Neustart halte ich persönlich für eine Designschwäche des jeweiligen Programms.
 

sheldon2.0

Mitglied
hat jemand einen Vorschlag wie ich nun das aktuelle Programm beenden könnte?
Ich möchte ja keine zwei Programme laufen haben.

Nach dem ProcessBuilder ein System.exit() bewirkt, dass das neue Programm nicht gestartet wird.
 
S

SlaterB

Gast
ich könnte es etwas umständlich selber testen oder auch besser merken, aber für dich nun wirklich leicht:
javaw statt java versucht?
immer ruhig komplette Antworten geben wenn mehrere Vorschläge aufgelistet sind
 

sheldon2.0

Mitglied
javaw oder java bringt keinen unterschied ... funktioniert beides ...

problem ist nur noch das mit system.exit()

Da ich leider nicht mehr viel Zeit habe, da ich es bald abgeben muss, kann ich das mit dem reset nicht mehr implementieren ... das Programm ist dafür zu umfangreich.
 
S

SlaterB

Gast
How to cancel a System.Exit and Restart the application in Java - Stack Overflow

enthält eine Idee, einen allgemeinen Launcher zu verwenden, der selber nicht beendet wird bevor es nicht wirklich zu Ende ist,
und das eigentliche Programm startet, am Anfang und später vielleicht erneut,
dazu müsste er von den Unterprogrammen informiert werden ob es weiter gehen soll oder Ende, vielleicht über Rückgabewert von System.exit(),
das müssten die Unterprogramme, die eigentlichen Programme wohl in jedem Fall aufrufen, um sich richtig zu beenden?
die spannende Frage ist, ob ein System.exit() im Unterprogramm das Hauptprogramm möglicherweise nicht beeinträchtigt statt andersum,

auch dazu habe ich mal wieder keine Kenntnisse oder zumindest nicht Erinnerungen, habe dann aber mal getestet,
mit einem Miniprogramm bei mir nach
java - ProcessBuilder - Start another process / JVM - HowTo? - Stack Overflow
lief der Aufrufer weiter,
allerdings wurde ein System.exit() im Aufrufer auch blockiert solange das Unterprogramm ein JOptionPane offen hatte,
vielleicht keine allgemeingültigen Ergebnisse..
 

KrokoDiehl

Top Contributor
Klingt ehrlich gesagt komisch.
Wenn du via ProcessBuilder ein externes Skript startest welches selbsat via java-Befehl dein Programm nochmal startet, so solltest du die erste Instanz deines Programms beenden können.
Liegt zwischen dem
Code:
ProcessBuilder.execute()
(oder heißt es
Code:
run()
?) und dem
Code:
System.exit()
vielleicht zu wenig zeit? Ggfs. braucht Windows ein paar (Milli)Sekunden. Ich würde also mal mit
Code:
Thread.sleep()
arbeiten.
 

sheldon2.0

Mitglied
aktueller stand:

der jvm launcher zeigte mir "unable to access jar file" ...
habe nun auch sleep eingebaut und anschließend einen Absoluten Pfadnamen zur jar-File im Skript gesetzt.

nun funktioniert auch .... aber ich möchte keinen absoluten pfadnamen benutzen ... das soll auf jedem rechner laufen ... egal von welchem verzeichnis man das startet .... man unter linux ist das so einfach ...
 

sheldon2.0

Mitglied
Okay es läuft nun so wie gewünscht ...

Das Problem war, das Skript war in einem Unterverzeichnis ...
zum Starten der jar-Datei die in dem Überverzeichnis der Skriptdatei liegt habe ich ../file.jar gemacht ...

da aber das Arbeitsverzeichnis der jar-datei verwendet wird, reicht wohl einfach wenn man in dem skript
javaw -jar file.jar eingibt, als ob es im selben verzeichnis liegt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Unterschied zwischen List und LinkedList implementierung? Allgemeine Java-Themen 15
boschl2000 Springerproblem-Implementierung funktioniert nicht richtig Allgemeine Java-Themen 1
L rotateLeft implementierung Allgemeine Java-Themen 2
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
D Input/Output Implementierung eines CommandHandlers/Parsers für viele Eingaben Allgemeine Java-Themen 26
Stonie Prüfen von direkter Implementierung eines Interfaces Allgemeine Java-Themen 7
S Mutable objects und Implementierung von ChangeEvents Allgemeine Java-Themen 5
W Queue Implementierung Allgemeine Java-Themen 6
C Ein Iterator ist eine Implementierung des Interface Iterable? Allgemeine Java-Themen 2
F Implementierung von Teilprogrammen [Java|Python] Allgemeine Java-Themen 7
I TimSort - Sortieralgorithmus - Erklärung und Pseudocode - Implementierung Allgemeine Java-Themen 2
L Implementierung eines AVT-Baums Allgemeine Java-Themen 2
ruutaiokwu burstsort-implementierung in java? Allgemeine Java-Themen 2
D Implementierung einer Mehrsprachigkeit, wichtig ? Allgemeine Java-Themen 5
D Implementierung einer Rechteverwaltung Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
R "Countdown" Implementierung Allgemeine Java-Themen 5
K A*-Implementierung flexibler machen Allgemeine Java-Themen 4
J Java-Implementierung diverser Beziehungen zwischen Klassen bzw. Objekten Allgemeine Java-Themen 2
S BlueJ Cäsar-Implementierung Allgemeine Java-Themen 6
R Implementierung eines Interface durch 2 verschiedene Klassen Allgemeine Java-Themen 6
G Implementierung einer Kommunikation Allgemeine Java-Themen 7
S Implementierung einer PluginArchitektur Allgemeine Java-Themen 5
A OOP: Überschreiben/Implementierung von Methoden Allgemeine Java-Themen 5
K Objekt einer konkreten Implementierung eines Interfaces durch übergebenen String Allgemeine Java-Themen 2
R Intervall-Implementierung mit selbstgebauter LinkedList Allgemeine Java-Themen 7
J Best Practice für implementierung von equals(...) Allgemeine Java-Themen 7
Kr0e Eigene RMI Implementierung Allgemeine Java-Themen 3
V Wie finde ich die konkrete Implementierung? Allgemeine Java-Themen 8
G Implementierung vom AKS-Test Allgemeine Java-Themen 11
R software implementierung Allgemeine Java-Themen 3
N Observer/Observable der JAVA-API od. eigene Implementierung Allgemeine Java-Themen 2
K Design / Implementierung Allgemeine Java-Themen 5
B jre browser implementierung ? Allgemeine Java-Themen 4
B Elegantere Lösung bei der Implementierung eines Interfaces Allgemeine Java-Themen 2
G Klasse Queue Implementierung in Java Allgemeine Java-Themen 4
G Eigene PrintService Implementierung. Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben