von Anton_D » 31 Okt 2022, 03:37
Nachdem nach dem erneuten Update von JRE (diesmal Java 19) Tray mit Menü wieder verschwand, habe ich ein bisschen nach der Ursachen gesucht und gefunden. Mit der neuen JRE sieht man in dem Log folgendes Eintrag:
Tray not supported: At least Java 6 is needed to get tray support.
Im Quellcode findet man diese Zeile in der Klasse Java6Tray, Methode init. Als Erstes wird mit
if(JavaVersion.getVersion() >= JavaVersion.VERSION_1_6) {
geprüft, ob wir mindestens Java 6 haben, sonst funktioniert das ganze nicht, da uns die Klassen fehlen.
Wenn man dann die Methode JavaVersion.getVersion() anschaut, findet man schnell die Fehler. In der Zeile 64 wird geprüft, ob man eine Versionsnummer von der Länge 1 hat,
if(version.length() == 1) {
für den ersten Release der Version. Also kein späteres Punkt-Release. Falls ja, dann wird ein ".0" hinten hinzugefügt, damit der Rest des Algorithmus funktioniert. Aber das wird offensichtlich spätestens seit Version 10 nicht mehr so gehen.
Ersetzt man die Zeile durch
if(!version.contains(".")) {
Dann funktioniert das alles auch für die mehrstellige Versionsnummer.
Da ihr sowieso Commons Lang mitbringt, kann man auch das benutzen, muss einfach die Stellen anpassen, die aktuell noch interne Klasse benutzen. Der Quellcode für Tray-Überprüfung dann:
import org.apache.commons.lang3.SystemUtils;
import org.apache.commons.lang3.JavaVersion;
public class MyClass {
public static void main(String args[]) {
//System.out.println(SystemUtils.JAVA_VERSION);
System.out.println(SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_6));
}
}
Nachdem nach dem erneuten Update von JRE (diesmal Java 19) Tray mit Menü wieder verschwand, habe ich ein bisschen nach der Ursachen gesucht und gefunden. Mit der neuen JRE sieht man in dem Log folgendes Eintrag:
Tray not supported: At least Java 6 is needed to get tray support.
Im Quellcode findet man diese Zeile in der Klasse Java6Tray, Methode init. Als Erstes wird mit
if(JavaVersion.getVersion() >= JavaVersion.VERSION_1_6) {
geprüft, ob wir mindestens Java 6 haben, sonst funktioniert das ganze nicht, da uns die Klassen fehlen.
Wenn man dann die Methode JavaVersion.getVersion() anschaut, findet man schnell die Fehler. In der Zeile 64 wird geprüft, ob man eine Versionsnummer von der Länge 1 hat,
if(version.length() == 1) {
für den ersten Release der Version. Also kein späteres Punkt-Release. Falls ja, dann wird ein ".0" hinten hinzugefügt, damit der Rest des Algorithmus funktioniert. Aber das wird offensichtlich spätestens seit Version 10 nicht mehr so gehen.
Ersetzt man die Zeile durch
if(!version.contains(".")) {
Dann funktioniert das alles auch für die mehrstellige Versionsnummer.
Da ihr sowieso Commons Lang mitbringt, kann man auch das benutzen, muss einfach die Stellen anpassen, die aktuell noch interne Klasse benutzen. Der Quellcode für Tray-Überprüfung dann:
import org.apache.commons.lang3.SystemUtils;
import org.apache.commons.lang3.JavaVersion;
public class MyClass {
public static void main(String args[]) {
//System.out.println(SystemUtils.JAVA_VERSION);
System.out.println(SystemUtils.isJavaVersionAtLeast(JavaVersion.JAVA_1_6));
}
}