# Programm soll sich nach update neustarten



## user00009 (9. Aug 2007)

Hallo!

Ich habe ein textbasiertes Programm, welches sich nach einem Update neustarten soll.
Ich haba dazu auch schon im Internet gesucht, aber nichts funtkionierendes gefuden.

Das Programm wird über ein bat File gestartet. Dabei werden die classpathes gesetzt und das Programm
in der Dosbox aufgerufen.

java -classpath %classpath% Main/Mainclass  und es läuft.

Wenn ich jetzt mit 


```
Runtime.getRuntime().exec(main.Mainclass.command); // Im command ist genau das java -classpath %classpath% Main/Mainclass eingetragen.
```

Doch leider beginnt das Programm nicht zu laufen. Weder in einer eigenen Dosbox noch in derselben. 
Ich bekomme auch keine Fehlermeldung ausser manchmal null und try/catch fängt mir auch nichts ab.

Weiss jemand was ich falsch mache?

PS: Habe den Aufruf auch schon mit Process pr = null; pr = Runtime..... ; ExitValue probiert da bekam ich process has not exited.


----------



## jPat (9. Aug 2007)

Runtime.getRuntime().exec(main.Mainclass.command);

muß da nicht der Pfad zum bat-File rein ??


----------



## user00009 (9. Aug 2007)

Auch wenn ich Runtime.getRuntime.exec(main.Mainclass.command,null,path);

versuche bekomme ich nur null zurück als Fehlermeldung.


----------



## jPat (9. Aug 2007)

Ich meinte eher so etwas wie:

Runtime.getRuntime.exec("c:\\test.bat");


----------



## jPat (9. Aug 2007)

meine bat:


```
c:\WINDOWS\system32\notepad.exe
```
der code dazu :


```
try {
			Runtime.getRuntime().exec("c:\\test.bat");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
}
```

funktioniert.


----------



## Guest (9. Aug 2007)

So was in die Richtung habe ich auch schon getestet.
Ein bat file das mir den Aufruf machen soll.
Leider ohne Erfolg.
Irgendwie habe ich das Gefühl, dass zwar was gestartet wird, aber das irgendwo im Hintergrund läuft
und der User nix damit machen kann.
Ich hab auch schon cmd.exe /C /K usw. ausprobiert,.


----------



## Guest (9. Aug 2007)

Wenn ich den bat Aufruf mache bekomme ich immer folgende Fehermeldung:

CreateProcess: D:\deliver\b.bat error=2


----------



## jPat (9. Aug 2007)

Dann poste mal deinen Code und die bat ...


----------



## jPat (9. Aug 2007)

oder mal ein Frame erzeugen, damit du siehst, ob es angezeigt wird...


----------



## Guest (9. Aug 2007)

1) Frame bringt nix, da das Programm textbasiert ist und auch unter Unix läuft.

2) Was soll dir die bat Datei bringen, wenn sie unter windows läuft? Da liegt nicht das Problem.

3) Codeteile habe ich eh schon gepostet und mehr als die Runtimezeile gibt es da eigentlich nicht.
    Und wie schon erwähnt habe ich es auch schon mit dem ProcessBuilder versucht und es hat nicht
    geklappt.


----------



## jPat (10. Aug 2007)

Was passiert denn, wenn du die bat - Datei direkt ausführst ? 
Wenn dein Programm sich nicht startet, dann liegt es an der bat Datei ....


----------



## NTB (10. Aug 2007)

Dieses Programm, dass sich nach dem Update neu starten soll: Ist das DEIN Javaprogramm, bei dem Du ein Update ausführst und es danach neu starten willst?

Oder ist es ein Fremdprogramm und Du möchtest es über Java starten?


----------



## tuxedo (10. Aug 2007)

ich glaube er meint ersteres:

Sein Programm updatet sich und soll sich dann neu starten.

BTW: Wie macht das Eclipse z.B. beim wechseln des Workspaces? Das sieht doch auch nach einem Neustart aus?!


----------



## NTB (10. Aug 2007)

Wenns das eigene Programm ist, würde ich das ganz anders machen. Da kann man sich doch einen Loader schreiben, der dann das eigentliche Programm startet und so eben auch jederzeit neustarten kann.


----------



## tuxedo (10. Aug 2007)

.. also quasi die Main-Methode in den Loader verschieben und da bei bedarf die Anwendung halt nochmal neu instanziieren... Jo. Das wäre die eine Möglichkeit. 

Man könnte aber auch mit dem Error-Level den eine sich beendende Anwendung von sich gibt außerhalb Java das ganze neu starten. Dann könnte man den Loader auch "updaten".

- Alex


----------



## thE_29 (10. Aug 2007)

Du kannst dir aber auch ne bat Datei oder eine exe (je nach OS halt einen Starter) schreiben der auf den return Wert (System.exit(WERT)) abfragt und jenachdem was da zurückkommt das Programm nochmals startet oder einfach beendet!


----------



## tuxedo (10. Aug 2007)

Hab ich das nicht gerade geschrieben ?!


----------



## thE_29 (10. Aug 2007)

Tja, ich kam erst 1 Stunde später zum Absenden, von daher war dein Reply noch nicht da als ich das verfasst habe  (War Mittag essen während dem Post )


----------



## tuxedo (10. Aug 2007)

Wir brauchen unbedingt so ein Forum-Feature das einem meldet wenn in der zwischenzeit neue Beiträge geschrieben wurden ... ;-)
Weil in letzter Zeit ist das, zumindest in den Thread in denen ich mit unterwegs war, sehr häufig passiert.


----------



## Leroy42 (10. Aug 2007)

alex0801 hat gesagt.:
			
		

> Wir brauchen unbedingt so ein Forum-Feature das einem meldet wenn in der zwischenzeit neue Beiträge geschrieben wurden ... ;-)



... oder Jangos Vorgehensweise, die in einem anderen Thread geschrieben wurde:

Einfach direkt vor dem Absenden, einmal den gesamten geschriebenen Text
sichern (Ctrl-A, Ctrl-C), dann mit F5 aktualisieren und nachschauen ob
zwischenzeitlich ein neuer Post eingegeben wurde und schließlich mit
(Ctrl-A, Ctrl-V) den geschriebenen Post wieder einfügen und den Post absenden...


----------



## tuxedo (10. Aug 2007)

Wieso muss eigentlich alles der User machen wenn es das Forum für einen machen kann?

a) denk ich da nicht immer dran
b) denken da andere nicht immer dran
c) wissen das nicht alle


----------



## thE_29 (10. Aug 2007)

Und wo ist eigentlich das Problem?

Lieber 2mal geholfen als kein mal


----------



## Leroy42 (10. Aug 2007)

alex0801 hat gesagt.:
			
		

> Wieso muss eigentlich alles der User machen wenn es das Forum für einen machen kann?



Kann es soetwas denn grundsätzlich?  ???:L 

Wenn du auf Antworten (oder Zitieren) klickst, wird doch nur ein Serverzugriff
ausgeführt und egal wie lange du jetzt an der Antwort _bastelst_, kann der
Server _dir_ (dem Browser) doch prinzipiell nichts zusenden, oder?  :shock: 

Oder meinst du, dass nach Klick auf _Absenden_ auf dem Server gecheckt
werden soll, ob zwischenzeitlich neue Posts _hinzugekommen_ sind und das
Eintragen dieses Posts eventuell mit einer Rückversicherung erfolgen soll?

In der Art:


			
				Schlauer Forumsserver hat gesagt.:
			
		

> _Während des Erstellens ihrer Antwort sind weitere Posts in diesem
> Thread erstellt worden. Wollen Sie dennoch absenden?_


----------



## Leroy42 (10. Aug 2007)

thE_29 hat gesagt.:
			
		

> Und wo ist eigentlich das Problem?
> 
> Lieber 2mal geholfen als kein mal



Sehe ich auch so, deshalb mache ich das, was
ich eben beschrieben habe, auch so gut wie nie!


----------



## NTB (10. Aug 2007)

Aaaalso Du kannst ja auch ein Shell Script und dann auf System.exit()... äh never mind... sorry vertippt 

Leroy es gibt viele Foren, wo das so läuft, wenn Du etwas schreibst und abschickst während bereits eine Antwort hinzugefügt wurde, Du dann einen Hinweis bekommst und Deinen Text dann nochmal abschicken kannst.


----------



## tuxedo (10. Aug 2007)

Jepp, so eine Meldung hab ich gemeint. Von "Simple Machines Forum" weiß ich dass es das kann. Aber ob phpBB (ist doch hier phpBB, oder??) das kann: Keine Ahnung. Wenn nicht gibts vielleicht ein AddOn oder Mod das sowas kann.
Jedenfalls würde ich es begrüßen wenn solch eine Funktion den Weg in dieses Forum findet. 

@thE_29

Tankst du dein Auto auch "sicherheitshalber" 2mal voll? Wohl eher nicht. Denn die Zapfpistole schaltet für dich ab, bevor noch alles überläuft...

- Alex


----------



## Leroy42 (10. Aug 2007)

NTB hat gesagt.:
			
		

> Leroy es gibt viele Foren, wo das so läuft, wenn Du etwas schreibst und abschickst während bereits eine Antwort hinzugefügt wurde, Du dann einen Hinweis bekommst und Deinen Text dann nochmal abschicken kannst.



Wenn das so ist, okay!  :toll: 

Kannte ich bisher noch nicht...


----------



## thE_29 (10. Aug 2007)

@alex0801: Du kannst dir gar nicht vorstellen, wie oft Leute posts einfach nicht lesen! Ist mir schon oft passiert, das ich die richtige Antwort gepostet habe (oder jemand anders) und xx Posts später sagt einer das nochmal und dann begreifts der Threadersteller!

Außerdem ist man sicher froh, wenn jemand hilft bevor man gar keine Hilfe bekommt, von daher hinkt dein Vergleich mitn Autovolltanken!


----------



## tuxedo (10. Aug 2007)

Naja, es ist niemandem "besser" geholfen nur weil 2x das gleiche gepostet wurde. Und ob zweimaliges Schreiben denen hilft die eh nicht lesen was man schreibt ist auch fraglich. 

IMHO _könnte_ die zweite Antwort sogar besser ausfallen wenn der Schreiber die erste Antwort "mitbekommt" und seinen Text daraufhin "anpasst". 

Ich wollte hier jetzt eigentlich keine Diskussion über das Für und Wider von mehrfach-Posts mit dem gleichen Inhalt anzetteln. Ich wollte eigentlich nur zum Ausdruck bringen dass so eine Funktion kein Schaden für das Forum wäre, zumal es sicher einige (ich auch) von anderen Foren so _gewohnt_ sind vor dem wirklichen abschicken des Beitrags auf eventuelle neue Beiträge hingewiesen zu werden. 

Wäre also schön wenn die Foirumleitung das zur Kenntnis nimmt, darüber nachdenkt und wir hier zum eigentlichen Thema zurückfinden...


----------



## Guest (13. Aug 2007)

alex0801 hat gesagt.:
			
		

> ich glaube er meint ersteres:
> 
> Sein Programm updatet sich und soll sich dann neu starten.
> 
> BTW: Wie macht das Eclipse z.B. beim wechseln des Workspaces? Das sieht doch auch nach einem Neustart aus?!



Ja genau so meine ich das. Das EIGENE Programm updated sich und soll sich anschließend neustarten, sowie das bei Eclipse funktioniert. Nur das meine Anwendung nur textbasiert läuft. Es gibt dort keine Grafik und es läuft auch auf UNIX Maschinen, die nur eine textbasierte Oberfläche installiert haben.

Da wäre eben die ideale Lösung ein gewesen, laut Internet das mit dem Runtime. Soll auch funktionieren, nur eben bei mir nicht.


----------



## tuxedo (13. Aug 2007)

Du hast du jetzt noch andere Möglichkeiten genannt bekommen:

- Spezielles Error-Level beim beenden das man mittels Start-Script (das du unter Unix wohl sowieso hast) auswertest und ggf das Programm dann neu startest

- Eine extra Loader-Klasse die nix anderes macht wie dein Programm neu zu starten nach einem Update


----------

