Frage

Was ist der beste Weg, wenn die Version der JRE auf einer Maschine installiert, um zu bestimmen hoch genug für die Anwendung, die der Benutzer ausführen möchte? Gibt es eine Möglichkeit, es mit Java-only Sachen zu tun? Ich mag die Lösung unter Windows / Linux / Mac OS X arbeiten - wenn die JRE-Version zu niedrig ist, sollte eine Meldung angezeigt werden. Ich bin eine Ausnahme zur Zeit bekommen, wenn ich versuche, es zu laufen auf Java 1.5 (die App für Java 1.6 erstellt wird). Wenn es keine universelle Lösung ist, was ist der beste Weg, um es unter Windows zu tun?

War es hilfreich?

Lösung

Ein Antrag auf eine höhere Version gebaut JRE wird nicht auf einer niedrigeren Version JRE laufen. Also würden Sie nicht in der Lage sein, nur Code in Ihre Anwendung die JRE-Version zu überprüfen. - Wenn die JRE-Version nicht kompatibel war, Ihr JRE-Version-checking Code würde nicht in erster Linie läuft

Was würden Sie tun müssen, ist eine Art von Launcher-Anwendung, die für eine niedrigere-Version JRE (1.3?), Die überprüft die Version und startet dann die App bei Bedarf aufgebaut wird. Das klingt irgendwie kludgy mir.

Was ist die Version während der Installation überprüft? Installieren Sie die App in einer Weise, dass Sie Umgebungsvariablen überprüfen können, oder tun, jede Art von Scripting?

Andere Tipps

Sie können tun dies mit Reflexion und zwei Compiler. Erstellen Sie eine Hauptklasse mit der ältesten Java-Version, die Sie in der Lage sein wollen, mit auf Anhieb funktioniert. Es überprüft die Version System.getProperty("java.version"), oder was auch immer, und dann verwendet Reflektion Ihre real Haupt-Klasse zu laden, wenn diese Überprüfung bestanden wird, möglicherweise sogar das Glas direkt geladen werden. Die JRE sollte keine Klassen laden, die nicht von Ihrer äußeren Hauptklasse bei der Kompilierung verwiesen wurde.

Sie sollten erwägen Java Webstart . Auch wenn der Name etwas wie Applets schon sagt, geht es um Standalone-Anwendungen. Webstart ist eine Trägerrakete, die eine JNLP-Datei überprüft (eine einfache XML-Datei, in der Sie den Download-Standort Ihrer App zu konfigurieren, um die benötigte Java-Version und einige andere Metadaten) und startet die App mit der richtigen JRE. Es aktualisiert auch die Anwendung, wenn eine neuere Version verfügbar ist. Der Nachteil ist, haben Sie eine JNLP-Datei zu schreiben. Hier ein Beispiel:

<?xml version="1.0" encoding="utf-8"?>

<!--
###############################################################################
#
# @(#)draw.jnlp 1.6 02/09/11
#
# JNLP File for Draw Demo Application
#
###############################################################################
 -->


<jnlp spec="0.2 1.0"
      codebase="http://java.sun.com/javase/technologies/desktop/javawebstart/apps"
      href="draw.jnlp">
   <information> 
      <title>Draw 4 App</title> 
      <vendor>Sun Microsystems, Inc.</vendor>
      <homepage href="http://java.sun.com/javase/technologies/desktop/javawebstart/demos.html"/>
      <description>A minimalist drawing application along the lines of Illustrator</description>
      <description kind="short">Draw Demo Short Description</description>
      <icon href="images/draw.jpg"/>
      <offline-allowed/> 
   </information> 
   <resources>
      <j2se version="1.3+" href="http://java.sun.com/products/autodl/j2se"/>
      <j2se version="1.3+"/>
      <jar href="draw.jar" main="true" download="eager"/>
   </resources>
   <application-desc main-class="Draw"/>
</jnlp> 

Eine zweite Möglichkeit ist ein Startprogramm-Programm zu verwenden. Ein Beispiel ist die Apache Commons Launcher . Sie können auch einige Launcher schreiben App selbst, aber das ist in der Regel nicht die Mühe wert.

Sie auch interessieren könnten mit Commons-Launcher, mit dem Sie Setup verschiedene Umgebungseinstellungen ermöglicht, oder führen Sie Vorprüfungen vor Ihrer Anwendung aufrufen.

http://commons.apache.org/launcher

Im Allgemeinen haben wir dies mit einem C genähert oder (wenn Unix-only) Shell-Wrapper. Nicht sicher, dass dies wirklich für Sie arbeiten.

Wir nähern wir dies auch durch die JRE in unserem Produkt integrieren. Kümmert sich um 99,9% der Fälle (die anderen 0,1% der Zeit ist ein Benutzer explizit ändern unsere Konfiguration eine andere JVM zu verwenden). Wieder nicht sicher, dass dies für Sie eine vernünftige Lösung ist.

In unserem Fall gibt es erhebliche Mengen an nativen Code (JNI und andere), so eine installierbare Bild für jede Plattform Schneiderei unterstützen wir ohnehin erforderlich ist. Aber wenn Sie mit einer reinen Java-Lösung handelt, können Sie einfach Ihre Mindest dokumentieren müssen und sagen den Leuten mit dem Programm (kein Wortspiel beabsichtigt) zu erhalten, wenn sie sind deine Sachen zu laufen. Es ist sorta wie Leute beschweren, dass mein Mac nicht MSVC laufen, oder dass meine Linux-Box Probleme läuft World of Warcraft hat. Das ist einfach nicht die (virtuelle) Maschine der Software für gezielte ist - Sie wechseln müssen. Zumindest in der Java-Welt, können wir wirklich ein Upgrade nennen dies, obwohl, ohne Gefühle niemandes OS-religiösen zu verletzen. (Versuchen Sie, den Mac-Benutzer zu sagen, um Windows XP auf "Upgrade" MSVC laufen -. Es gibt ein Beat-down warten geschehen)

Sie können eine Java-Version erforderlich, wenn der Java-Befehl ausgeführt wird, z.B. java -version:1.6* com.me.MyClass. Nicht sicher, ob dies funktioniert auf allen Versionen von Java, aber es funktioniert OK auf 1,6 sowieso.

Für den Launcher -. Überprüfen Sie die Version dort

Im Inneren des APP; wie oben Verwendung System.getProperties ();

Properties sProp = java.lang.System.getProperties();
String sVersion = sProp.getProperty("java.version");
sVersion = sVersion.substring(0, 3);
Float f = Float.valueOf(sVersion);
if (f.floatValue() < (float) 1.4) {
    System.out.println("Java version too low ....");
    System.exit(1);
}
...

einen Start Klasse für Java 1.2 kompiliert, das ruft die real main () in der 1,6-Klassen. Wenn eine nicht unterstützte Ausnahmeklasse ist sie es fängt geworfen und eine schöne Fehlermeldung angezeigt werden.

Hier ist der Code die JRE-Version in einem System installiert zu bekommen.

var list = deployJava.getJREs();
var result = "";
result = list[0];
for (var i=1; i<list.length; i++)
{
    result += ", " + list[i];
} 
document.write("jre version : "+result);

System.getProperties () gibt Ihnen eine Liste der JVM-Eigenschaften einschließlich der verschiedenen Version IDs der JRE, JVM und Spezifikation. Dieser implementiert für alle Versionen von Java so sollten unabhängig von der Version arbeiten in kompilierter in und Version laufen, oder die Umsetzung.

Wenn Sie eine Basisklasse schreiben die Version zu testen, können Sie diese zunächst in den main () startet Klasse aufrufen. Es muss allerdings wirklich grundlegende Funktionalität sein oder Sie könnten brechen sie riskieren.

Hmm .. rufen Sie mich ein langweiliger Kerl, aber was ist los mit launch4j oder andere nativen Launcher verwenden, zum Beispiel.

eine native Launcher Verwenden Sie die JVM-Version, bevor sie tatsächlich ausgeführt wird, Ihren Code zu überprüfen. Java nur Lösungen (in meinem Buch) nur dann Sinn machen, wenn Sie mit den Entwicklern beschäftigen; sobald Sie Endnutzern treffen, werden Sie feststellen, dass sie überhaupt nicht kümmern uns um Java oder seine technischen Details. Wenn Sie Ihre Anwendung in GW-Basic geschrieben hätten, wären sie nicht weniger kümmern, solange Ihre Anwendung funktioniert.

Wenn Java 1.6 nicht installiert ist, lauchner4j wird der Benutzer auf die Download-Seite für JDK 1.6 zeigen. Das ist wahrscheinlich besser geeignet für Ihr Problem als Magie in Java zu tun.

Ich finde, dass WinRun4j für mich ganz gut funktioniert (aber dann wieder kann ich voreingenommen sein, da ich es :-)) schrieb. Auf diese Weise können Sie ein Minimum angeben und / oder maximale Java-Version erlaubt. Es wird ein Meldungsfeld an den Benutzer, wenn eine geeignete JRE-Version (und die Nachricht ist anpassbar) nicht gefunden werden eingeblendet.

die oben ist Allzu verdammt kompliziert. Gehen Sie einfach:

Properties props = System.getProperties()
props.list(System.out)

Und erfahren Sie alles über Ihre JVM, JRE, JDK und Personal sehen. Oder erhalten Sie einen bestimmten Wert durch die Verwendung:

//full list of possible props you can see if u run code above
String props = System.getProperty(prop)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top