Abfrage ob JRE oder JDK auf System installiert ist.

Status
Nicht offen für weitere Antworten.

KJay

Mitglied
Hallo!

Ich habe folgendes Problem:

Mein Programm was ich geschrieben haben muß zwingend auf einem Java JSK VErsion 6 oder höher ausgeführt werden. Nun versuche ich schon in der main über System.getProperty() abzufragen ob die Version okay ist und ob ein das Programm auf einem JDK ausgeführt wird...

Die Versionsabfrage mach ich so:

Code:
System.getProperty("java.specification.version")

Aber wie kann man denn abfragen on eine JRE oder ein JDK läuft?

Danke schonmal für die Hilfe!

Gruß,
Kai

PS: Wichtig ist das ein JDK läuft, weil zur Laufzeit compiliert wird..... Deswegen kann das Programm nicht auf einem JRE ausgeführt werden, da meines WIssens nach auf einem JRE nicht compiliert werden kann....oder?
 

Campino

Top Contributor
Jop, auf einem JRE kann nicht kompiliert werden.

Wenn du über System.getRuntim().exec() den Kommandozeilenbefehl javac -version ausführst, erhälst du einen Process, in dessen InputStream die Version steht. Darin musst du nach der versionsnummer suchen. Guck dir die Ausgabe am besten mal in der Konsole an. Wenn kein JDK vorhanden ist, kommt unter Windoof "Der Befehl "javac" ist entweder falsch geschrieben oder konnte nicht gefunden werden. "
Die Ausgabe sollte sich in jedem betriebssystem weit genug unterscheiden, damit keine Verwechslungsgefahr besteht.
 

KJay

Mitglied
Danke schonmal für die Antwort.

Leider funktioniert das bei mir nicht. Ich habe ein JDK installiert - aber bekomme trotzdem unter der WIndows-Eingabeaufforderung die Fehlermeldung. Woran kann das liegen?

Gruß,
Kai

PS: Kann es sein das Du als Java Befehl Runtime.getRuntime().exec("javac -version") meintest?
 

Murray

Top Contributor
Man könnte versuchen, per Class#forName eine Klasse zu laden, die beim JDK dabei ist, aber nicht in der JRE (z.B. com.sun.tools.javac.Main). Ganz sauber ist das nicht, da die com.sun.*-Klassen nur beim SUN-JDK dabei sind und auch nicht notwendigerweise in zukünftigen JDKs unter dem gleichen Namen ehthalten sein werden, aber vielleiht reicht es für deinen Anwendungsfall.
 

KJay

Mitglied
Danke! Leider reicht das nicht aus... Wäre wirklich wichtig, das ich das sauber auslesen kann.... ABer danke für deine Antwort!
 

Murray

Top Contributor
Ich fürchte, das wird 100% sauber ( = zukunftssicher & plattformunabhängig ) nicht möglich sein - entweder sucht man nach einer bestimmten Datei im lokalen Dateisystem, oder man lässt Java eine bestimmte Klasse suchen; in beiden Fällen ist man von gwissen "Non-Standard-"Eigenschaften abhängig.

Aber du willst ja zur Laufzeit Kassen übersetzen - wie soll das denn passieren? Vermutlich sind dadurch bereits die Randbedingungen definiert
 

KJay

Mitglied
Also, ab VErsion 6 von Java gibt es einen Compiler: Ich habe das so realisiert:

public class ObjectFactoryCompiler {
public ObjectFactoryCompiler() {
File datei = new File("." + File.separator + "generated" + File.separator + "ObjectFactory.java");
if (!datei.canRead()) {
new ErrorDisplay("Error while compiling", "Maybe one of the following errors happend\n\n"
+ "- the ObjectFactory wasn´t generated\n"
+ "- You are running the application on a JRE instead of JDK\n");
}
Tool javac = ToolProvider.getSystemJavaCompiler();
javac.run(null, null, null, datei.getAbsolutePath().toString());
}

Jetzt ist eben das Problem, das mein Programm bis zu dieser Klasse auf einem JRE ausgeführt werden kann. Wenn es aber zum Aufruf dieser Klasse kommt unter einem JRE, dann geht das natürlich nicht mehr....deswegen ist es wichtig das ich vorher abfrage ob das Prog auf einem JDk läuft..

Gruß,
Kai
 

Murray

Top Contributor
Nun, dann könntest du doch einfach beim Programmstart versuchen, einen Compiler zu erzeugen (oder einfach nur die entsprechende Klasse zu laden wie in meinen ersten Vorschlag - nur eben mit der "offiziellen" Compilerklasse). Wenn dabei eine Exception auftritt, war der Compiler offenbar nicht verfügbar, und man arbeitet mit einer JRE oder einem zu alten JDK. Die Exception musst du einfach nur sauber abfangen und dem Benutzer einen entsprechenden Hinweise geben.
 

KJay

Mitglied
DARAUF bin ich noch gar nicht gekommen. Das klingt nicht so schlecht - das stellt einerseits sicher das JDK 6+x ausgeführt wird weils den Compiler ja erst ab 6 gibt und andererseits gibts den nur auf dem JDK.... DAs hört sich doch schonmal nach einem guten workarround an....das versuche ich mal! VIELEN DANK erstmal! Du hast mir einen klasse Ansatz geliefert!
 

KJay

Mitglied
mm...ich weiss nicht wie ich das hinbekommen kann - hast Du mal einen Tipp wie man das macht?

Ich habe das so versucht:

Code:
if (ToolProvider.getSystemJavaCompiler().getClass().toString() != null ) {
		//starte Progra,,
		} else {
		  fehler behandeln
                                    }

klappt nicht - gibt eine nullpointer wenn das auf dem JRE läuft....

Wie kann ich die denn abfangen? (try-catch ist klar - aber wie genau die nullpointer....?)

Gruß,
Kai[/code]
 

Murray

Top Contributor
Die NullPointerException könntest abfangen wie jede andere Exception auch, also
Code:
try {
  /* ... */
} catch ( NullPointerException npe) {
  /* Fehlerbehandlung */
}

aber in diesem Fall ist es ja viel leichter: ToolProvider#getSystemJavaCompiler liefert ja null zurück, wenn es keinen Compiler gibt.

Also:
Code:
if (ToolProvider.getSystemJavaCompiler()!= null ) {
      //starte Programm
} else {
      // Fehler behandeln 
}
 

KJay

Mitglied
Mmmmm....ich bin etwas überfragt.....wenn ich das ganze jetzt unter Eclipse laufen lasse dann funktioniert das Prima. Wenn ich mein Programm nun als .JAR file exportiere und dann auf dem JDK ausführe, springt die Fehlerbehandlung an...... Woran könnte das liegen?

Gruß,
Kai

PS: Ich habe Windows Vista und sowohl JRE als auch JDK installiert. Im Java Panel in der Systemsteuerung habe ich dann um die .JAR auszuführen das JRE deaktiviert. Ist das eventuell nicht genug?
 
G

Gast

Gast
musste unter vista jre6.0 komplett rausschmeissen, damit er mir jdk5.0 nimmt. kannst das jre verzeichnis ja einfach mal umbenennen und dann JAVA_HOME aufs jdk verzeichnis setzen
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie erstelle ich dazu eine Abfrage ob der Button gedrückt wurde? Allgemeine Java-Themen 8
J Mehrfache if-else-Abfrage zusammenfassen Allgemeine Java-Themen 51
L 2 Dimensionale ListArray Abfrage nach einem Wert suchen Allgemeine Java-Themen 5
I Wie kann ich den Wert aus einer If abfrage ausgeben Allgemeine Java-Themen 23
Zeppi NullPointerException in einer if-Abfrage Allgemeine Java-Themen 6
1Raini Java if-Abfrage funktioniert nicht! Allgemeine Java-Themen 3
tom.j85 Exception bei Abfrage von Ländercodes in API? Allgemeine Java-Themen 13
T Fehler bei IF abfrage Allgemeine Java-Themen 8
D Mehrdimensionale Abfrage Allgemeine Java-Themen 15
MiMa If-Abfrage mit Parameter Allgemeine Java-Themen 8
kodela Binäre Abfrage Allgemeine Java-Themen 12
D MAC Adressen Abfrage Allgemeine Java-Themen 5
J Problem bei Hashmap Key-Abfrage Allgemeine Java-Themen 4
B Swing Hilfe bei Abfrage von Benutzernamen und Passwort Allgemeine Java-Themen 2
J If Abfrage funktioniert nicht Allgemeine Java-Themen 4
B Java Abfrage Netzbetrieb oder Akkubetrieb Allgemeine Java-Themen 1
T Login-Abfrage Allgemeine Java-Themen 3
T Login mit LDAP-Abfrage Allgemeine Java-Themen 3
M Event Handling Tastatur abfrage Allgemeine Java-Themen 5
2 If-Abfrage um Uhrzeit einzuordnen Allgemeine Java-Themen 2
F Java ip abfrage mit Dateiausgabe ? Allgemeine Java-Themen 2
V Java Editor Problem mit ! bei if-Abfrage Allgemeine Java-Themen 5
N Schlüsselworte if abfrage ob linke oder rechte maustaste gedrückt ist Allgemeine Java-Themen 5
H args abfrage vereinfachen Allgemeine Java-Themen 7
P Tastatur abfrage ohne KeyListener Allgemeine Java-Themen 3
E Methoden Server Benutzer abfrage Allgemeine Java-Themen 2
D Internet Abfrage aber mit Warteschleife Allgemeine Java-Themen 6
B Kapselung if-Abfrage bei "MVC-verteilten" Listenern Allgemeine Java-Themen 5
R JNI if abfrage gibt immer false zurück. Allgemeine Java-Themen 7
S if-Abfrage Allgemeine Java-Themen 5
T Wiederholte Abfrage? Allgemeine Java-Themen 5
B abfrage ob file ausgeführt wurde Allgemeine Java-Themen 4
Z Boolean Abfrage gibt kein Boolean zurück, aber warum? Allgemeine Java-Themen 6
P Google Abfrage auslesen Allgemeine Java-Themen 2
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
W ICQ Status Abfrage mit Java Allgemeine Java-Themen 3
M if - else Abfrage beenden Allgemeine Java-Themen 4
MQue if- Abfrage Allgemeine Java-Themen 4
B Abfrage ob JRE installiert ist, JAR automatisch starten Allgemeine Java-Themen 5
MQue if Abfrage Allgemeine Java-Themen 27
MQue if- Abfrage Allgemeine Java-Themen 26
C Versionsstring Abfrage Allgemeine Java-Themen 7
G Tastatur abfrage Allgemeine Java-Themen 8
D Doppeltverschachtelte if-Abfrage Allgemeine Java-Themen 10
Z mit java htaccess - abfrage bestätigen/umgehen Allgemeine Java-Themen 2
U if Abfrage macht etwas falsch Allgemeine Java-Themen 2
G Problem mit if-Abfrage bei Benutzeingabe Allgemeine Java-Themen 2
P Java Acces Datenbank Problem ! (Brauche eine Abfrage) Allgemeine Java-Themen 5
T IF Abfrage + YES_NO Option mittels JOptionPane Allgemeine Java-Themen 3
U IF-Abfrage Allgemeine Java-Themen 17
H Java-Abfrage Allgemeine Java-Themen 9
A FileChooser Datei-Überschreiben Abfrage Allgemeine Java-Themen 2
F Java Passwort abfrage Allgemeine Java-Themen 2
S CDDB-Abfrage mit Java unter Linux? Allgemeine Java-Themen 4
L Datenbank Abfrage (Felder&Tabelle nicht fix) in ArrayLis Allgemeine Java-Themen 4
S Integer-splitten für Abfrage. Allgemeine Java-Themen 4
G Abfrage in datenbank Allgemeine Java-Themen 5
X Input/Output InputStream/Scanner(System.in) read()/hasNextLine() block unterbrechen Allgemeine Java-Themen 7
P9cman java.Lang Klassen fehlen in JRE System Library Allgemeine Java-Themen 1
B Lottospielen mit System, Versuch 2, noch umständlicher als vorher Allgemeine Java-Themen 1
J Frage zu System.getproperties. Allgemeine Java-Themen 60
sascha-sphw Erste Schritte Unit und Integration-Tests im Java Modul System Allgemeine Java-Themen 10
F Frage zu System.in Allgemeine Java-Themen 3
E System property setzten Allgemeine Java-Themen 8
Kirby.exe Movement System für Spiel Allgemeine Java-Themen 13
O Beziehung System.exit(x) <>Errorlevel Allgemeine Java-Themen 2
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
F System Tray Menubutton ActionListener Allgemeine Java-Themen 5
H Im Tiled-Map-System ein Item anklicken Allgemeine Java-Themen 0
S Java Plugin System (ohne OSGI) Allgemeine Java-Themen 10
D System.arraycopy verhält sich seltsam Allgemeine Java-Themen 1
C Login System Allgemeine Java-Themen 19
A BufferedReader ohne System.in Allgemeine Java-Themen 9
VfL_Freak JDK installieren System-Property "user.dir" Allgemeine Java-Themen 6
J System.arraycopy ergibt anderes Resultat als for-loop Allgemeine Java-Themen 4
F Wie kann ich auf einem System prüfen, ob eine lib verfügbar ist? Allgemeine Java-Themen 2
D Java System.out::println Allgemeine Java-Themen 1
D Methoden Java Applikation Die System Auslastung optimieren ? Allgemeine Java-Themen 7
S Ist Java ein geschlossenes System? Allgemeine Java-Themen 2
L Erste Schritte Suche Java Wiki System? Allgemeine Java-Themen 5
chuxXo System/JLayer Volume ändern Allgemeine Java-Themen 0
Neumi5694 System.out und System.err umleiten - NICHT im Quelltext Allgemeine Java-Themen 4
X System.out/err(Die Console) in JTextArea ausgeben Allgemeine Java-Themen 2
S Best Practice System.arrayCopy verändert Ziel-Array Allgemeine Java-Themen 2
A Methoden Der Sinn von system.out.print(); Allgemeine Java-Themen 9
A System freezes when trying to run external command from Java with wait for Allgemeine Java-Themen 3
A Java | Login-System Allgemeine Java-Themen 3
C System.out.print("") Compiler Fehler Allgemeine Java-Themen 2
Joew0815 Best Practice Wie am besten Plugin-System erstellen? Allgemeine Java-Themen 12
C System.in erhält Input von Tastatur. wo wird das festgelegt? Allgemeine Java-Themen 4
F Benachrichtigungs-System Webapp Java Servlet Allgemeine Java-Themen 10
M collection persistence system Allgemeine Java-Themen 4
V System.out.println an jeder Stelle im Projekt löschen Allgemeine Java-Themen 4
D System.out's in String speichern. Allgemeine Java-Themen 2
H Interpreter-Fehler ArrayIndexOutOfBoundsException bei System.arraycopy() Allgemeine Java-Themen 3
M System herausfinden Allgemeine Java-Themen 6
O Variablen System.getenv: Sinnlose Werte, Arrays?! Allgemeine Java-Themen 6
G java.exe in System 32. Hilfe!!! Allgemeine Java-Themen 8
R Methoden Tag System Problem Allgemeine Java-Themen 3
J System.out im GUI anzeigen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben