# Java Version Prüfen lassen



## Noxen (1. Sep 2012)

Hallo,

wollt mal gern wissen, was das beste ist, bzw wie ich vor dem Start, vor/nach der Installation des Progs die Java Version zu überprüfen und ggf zu Installieren. Ich habe ein kleines Programm für Java 7 - Update 5 geschrieben. Leider musste ich nun feststellen, dass viele noch ältere Versionen haben. Bei denen kommt eine Fehlermeldung, dass das Programm nicht geöffnet werden konnt, aber eben nicht, warum. Ich habe für das Prog eine Installation mit dem InstallJammer gemacht. Kann man vllt auf diese Art Java mitinstallieren lassen? 

Was wäre die beste Möglichkeit?


Außerdem möchte ich gern das Programm automatisch aktualiseren lassen, natürlich nach Abfrage beim User. Wie wäre denn sowas möglich? Kleine Tipps (Denkanstöße) dürften reichen. Dann such ich mir den Rest zusammen. Weiß nur nicht, wo ich anfangen soll... Und was ich dafür vllt brauch.



Mfg Noxen


----------



## Sym (1. Sep 2012)

Du kannst natürlich ein JRE mit Deiner Applikation ausliefern. Das ist in der Regel kein Problem, solange Du das JRE mit in Deinem Installationspfad auslieferst.

Ansonsten kannst Du mit 


```
System.getProperty( "java.version" )
```

die aktuelle Java-Version ermitteln und im Fehlerfall eine Nachricht an den Benutzer geben und das Programm beenden.


----------



## Noxen (1. Sep 2012)

> die aktuelle Java-Version ermitteln und im Fehlerfall eine Nachricht an den Benutzer geben und das Programm beenden.



Ja, aber das Programm startet ja nichtmal, wenn die Aktuelle Version nicht drauf ist...


Also wäre es besser, die Java version in der Install mitzuliefern?


----------



## Sym (1. Sep 2012)

Warum startet es denn nicht? Nutzt Du schon neuere Features?


----------



## Noxen (1. Sep 2012)

hmm... anscheindend. Bin relativ neu in Java Programmierung. Mach das seid ein paar Wochen. Wie ich anfing hab ich gleich alles aktualisiert auf 1.7_05.

Es kommt wohl eine Meldung, in der stand, dass die Hauptdatei nicht geöffnet werden konnte. Er hatte da noch die 6er Java-Version drauf. Nach Update hat es dann einwandfrei funktioniert.


----------



## tröööt (1. Sep 2012)

@Sym
Es ist völlig egal ob man neue Features nutzt oder nicht wenn man eine Klasse mit JDK7 compiled und dann mit Java6 ausführen will. J7 hat den Header "v51.0", J6 erwartet aber maximal "v50.0".

@TO
In der Regel ist ein spezifisches Update eher unwichtig. Es kommt in der Regel nur auf die Major-Version an. Es gab zwar Fälle in denen das Update wichtig war (j6u10), aber das sind dann eher Dinge mit denen man sich als Programmierer auskennen muss.
Wenn du aber aufs Update genau prüfen willst kannst du das für Windows mit Launch4J. Dies prüft die Registry nach bestimmten Werten, und falls die nötige Java-Version nicht gefunden wurde wird der Browser mit java.com geöffnet (kann angepasst werden). Wie das unter Unix aussieht weiß ich nicht, denke aber mal das es hier auf was gibt. Mit "Java-Installern" kenne ich mich allgemein wenig aus da ich keinen Grund sehe eine Java-App zu "installieren". Eine App sollte als Jar (mit ggf. abhängigkeiten) ausgeliefert und direkt (oder via Launcher) startbar sein. Erst noch etwas "installieren" zu müssen (also Daten in bestimmte Ordner legen, Registry-Settings vornehmen, etc ...) zeigt eigentlich das der Programmierer einen Fehler im Konzept hat.


----------



## Noxen (3. Sep 2012)

Vielen Dank für deine Ausgiebige Erklärung dazu. Das mit dem Install sieht eben irgendwie Professioneller aus, dacht ich 

Nun gut, Ich lass mich gern eines besseren Belehren. Werd dann eher über Launcher gehen. Und den Launch4J werd ich mir auch mal genauer anschauen. Vielen Dank für Eure Worte!!!


----------



## TheDarkRose (3. Sep 2012)

Wenn du keine Java7-exklusiven Features nutzt, dann könntest du deinen Compiler auch so einstellen, dass er für Java6 kompiliert.


----------



## Mujahiddin (3. Sep 2012)

Du könntest auch 2 JARs ausliefern, die eine ist dein Programm und die andere ist der "Launcher", der in Java6 (oder geringer) kompiliert wird. Deine Launcher-JAR prüft nun, ob alle Voraussetzungen getroffen sind (ist auch sehr nützlich für Updates etc.) und je nachdem dann die Applikation starten oder eine Fehlermeldung auswerfen.


----------



## tröööt (4. Sep 2012)

naja ... klar sieht es schon irgendwie "besser" aus wenn man halt so n wizzard hat der dann so n paar balken hat die durchlaufen und alle dateien in halbwegs definierte ordner packt und notwendige configs erstellt ... aber das ist eigentlich nicht wirklich im sinne von java ...
auch native-wraper sind eher eine spielerei als wirklich sinnvoll ... aber man kann alles machen ...


ich geb dir mal ein vielleicht bekanntes beispiel : minecraft

du kannst erstmal so nur den launcher runterladen, einmal als normales JAR und dann noch als eine gewrapte exe mit Launch4J ...
das hat aber eigentlich eher was damit zu tun das es halt bequemer ist unter windows einfach ein doppelklick auf eine exe zu machen anstatt sich erst mit java auseinander setzen zu müssen ...
unix user wissen in der regel wie man etwas vom terminal startet und daher wird hier auch nur das JAR ohne z.b. shell-script ausgeliefert ...

wenn man nun minecraft startet ist das erste was gemacht wird alle daten zu laden und in einem speziellen ordner zu speichern ... und das ist dann auch schon eigentlich das "installieren" von minecraft ... und das ohne installer ...
alles was man von mitbekommt ist der durchlaufende balken der den download-status anzeigt ... was dann noch intern alles gemacht wird bleibt dem user verborgen ...
(auch wenn minecraft davon profitieren würde wenn es mal auf Java7 geupdated werden würde ... was dann aber viele ausschließen würde da das "alte" MAC auf PPC nur Java5 hergibt)

und genau so sollte man auch eine java app entwickeln ... das der launcher alle benötigten arbeiten macht und dem user lediglich einen fortschritt und wenn nötig noch ein paar einstellungsmöglichkeiten bietet ... aber so hoch-komplexe installer wie man es von einigen anderen dingen her kennt sollte man vermeiden ... ist zumindest meine persönliche meinung ...


----------



## Ark (4. Sep 2012)

Mujahiddin hat gesagt.:


> Du könntest auch 2 JARs ausliefern, die eine ist dein Programm und die andere ist der "Launcher", der in Java6 (oder geringer) kompiliert wird. Deine Launcher-JAR prüft nun, ob alle Voraussetzungen getroffen sind (ist auch sehr nützlich für Updates etc.) und je nachdem dann die Applikation starten oder eine Fehlermeldung auswerfen.


Wegen der 2 JARs: Schau dir mal Deliver Your Java Application in One-JAR™ ! an, vielleicht könnte das für dich interessant sein. Ob die Startklasse von One-JAR mit JDK 1.1 kompiliert ist, weiß ich aber gerade nicht.

Ark


----------



## Noxen (4. Sep 2012)

Super Ideen, das mit dem One-Jar muss ich mir in Ruhe mal anschauen, ob das was wäre.

Ich denke, ich werd das mit dem Launcher machen. Das der Launcher quasi alles überprüft und wenn alles ok ist, dann startet das Programm. 


> ob alle Voraussetzungen getroffen sind (*ist auch sehr nützlich für Updates etc.*)


 Das wäre dann das nächste, was kommt


----------

