# Java Programm aus anderem Java Programm starten



## Taggert (2. Jan 2011)

Servus,

ich habe eine Java Programm geschrieben - läuft auch wirklich gut, allerdings soll es sich von nem Server mit Updates versorgen.  Meine Idee hierzu war, dass ich ein anderes Java Programm, nennen wir es mal "Updater", schreibe, dieses auf dem Server nachschaut, ob das eigentliche Programm aktuell ist, um entsprechend die ganzen Dateien runterzuladen, und das Programm danach startet. Nun die Frage: "Wie starte ich ein Java Programm aus einem anderen Java Programm heraus?".  Ich möchte nicht mit C arbeiten, da es die Plattformunabhängigkeit zerstört.

Vielen Dank für Eure Hilfe
Taggert

PS: Ich will nicht mit Webstart arbeiten, da Updates nur ab und an anfallen - aber wenn Ihr einen anderen guten Gedanken habt - ich bin für (fast) alles offen.


----------



## L-ectron-X (2. Jan 2011)

Ruf einfach die main()-Methode des Updaters auf.


----------



## Taggert (2. Jan 2011)

Uhm, da liegt doch der Hund begraben - wie?  ich kann ja schlecht ne Instanz davon erzeugen, oder?


----------



## L-ectron-X (2. Jan 2011)

Probiere mal folgendes aus:

Aus deinem Java-Programm rufst du den Updater so auf:

```
Updater.main(null);
```

Voraussetzung dafür ist, dass dein Updater wirklich, wie du oben geschrieben hast, ein eigenständiges Java-Programm ist.
Wenn du deinem Updater noch ein paar Startoptionen mitgeben möchtest, kannst du das mit dem von der main()-Methode geforderten String-Array machen.


----------



## Taggert (2. Jan 2011)

Das muss ich gleich mal ausprobieren.  Lass mich raten, der Updater steht in gleichen Verzeichnis, dann muss ich mir den nicht über getResource reinholen.  Klever.
Danke Dir


----------



## vertex (2. Jan 2011)

Falls der Updater nicht mit im Classpath liegt, sollte ein Classloader helfen: Java Classloader

Ciao Olli


----------



## Taggert (3. Jan 2011)

Danke für den Link- wirklich ein interessanter Artikel.  Ich werde mir den noch das ein oder andere Mal genauer durchlesen.


----------



## tagedieb (3. Jan 2011)

Ich wuerde die beiden Programme getrennt ausfuehren. Zuerst der Updater, der die Version checkt und neue libraries runterlaedt. Dann das eigentliche Program. 

Wenn du ein Update runterlaedst musst du eh neu starten oder den Java Classloader so hinbiegen, dass er auch wirklich die neuen libraries laedt. Das ist zuviel Aufwand.

Alternativ wuerde ich Java Web Start empfehlen, welches ja insbesondere die Update funktion unterstuetzt.


----------



## homer65 (3. Jan 2011)

Taggert hat gesagt.:


> Servus,
> PS: Ich will nicht mit Webstart arbeiten, da Updates nur ab und an anfallen - aber wenn Ihr einen anderen guten Gedanken habt - ich bin für (fast) alles offen.



Vielleicht solltest du das nochmal überdenken.
Für sowas ist Webstart eigentlich ideal.


----------



## The_S (3. Jan 2011)

tagedieb hat gesagt.:


> Ich wuerde die beiden Programme getrennt ausfuehren. Zuerst der Updater, der die Version checkt und neue libraries runterlaedt. Dann das eigentliche Program.
> 
> Wenn du ein Update runterlaedst musst du eh neu starten oder den Java Classloader so hinbiegen, dass er auch wirklich die neuen libraries laedt. Das ist zuviel Aufwand.
> 
> Alternativ wuerde ich Java Web Start empfehlen, welches ja insbesondere die Update funktion unterstuetzt.



Dito. Die anderen Ansätze sind zu aufwendig. Runtime.getRuntime().exec ist dein Freund.


----------



## Taggert (3. Jan 2011)

Webstart is so ne Sache - die Software lädt ja dann vom Server aus, das will ich eigentlich nicht, da das ganze Ding schon etwas größer ist.  Ausserdem sollen es auch etwas mehr Nutzer sein, wodurch ich davon ausgehe, dass es Performance Probleme geben könnte.  Daher war mein Ansatz, dass man sich das Programm runterlädt und der Server nur die Updates macht (die hoffentlich nicht so häufig sind). Ausserdem brauch ich bei für mein Programm dann eine NutzerIdentifikation, die ich eigentlich nicht noch coden will.  Daher ist Webstart für mich suboptimal (obwohl ich auch schon darüber nachgedacht habe).

Aber vielen Dank für die guten Tipps und die Anregungen


----------



## tagedieb (3. Jan 2011)

Eventuell solltest du die Web Start Doku nochmal anschauen. Web Start unterstuetzt inkrementelles Runterladen und laedt dann nur die Updates nach. Die Applikation wird auf dem Client gespeichert und nicht jedes mal neu vom Server geladen.


----------



## homer65 (3. Jan 2011)

Bei Webstart läuft die Software nicht vom Server sondern vom Client.
Es wird lediglich geguckt, ob Updates da sind, die werden dann runtergeladen.
Wenn keine da sind, oder gar keine Verbindung zum Server existiert kann es rein vom Client aus laufen.


----------



## AlexSpritze (3. Jan 2011)

Also ich kenne mit JDownloader und SQuirreL zwei Java Programme, noch dazu Open Source, die einen solchen Mechanismus wie du ihn haben willst benutzen. Da kommt beim Starten dann auch die Frage, ob vorhandene Updates heruntergeladen und "installiert" werden sollen. Vielleicht schaust du dir da etwas ab?


----------

