(es gab einige Updates bezüglich Windows, Dank an Corinna List und Stefan König für ihren Input…)

Leider gab es in letzter Zeit Entwicklungen, die es erfordern, dass alle, die mit Java (und NetBeans) arbeiten (oder es unterrichten) sich überlegen müssen, ob sie nicht umsteigen auf OpenJDK und auf IntelliJ.

Die eine Entwicklung ist, dass Oracle, die Firma, die Java bislang entwickelt hat, beschlossen hat, Java ab Januar 2019 zu kommerzialisieren. Das heißt: Ab sofort (Java 8) gibt es Updates nur für Entwickler*innen, die eine Lizenz erwerben. Das ist ein drastischer Einschnitt in der Geschichte der Sprache Java. (Siehe Artikel auf Heise, Artikel in Computerwoche und Artikel auf Aspera)

Zum Glück gibt es OpenJDK, eine open-source-Variante von Java. Diese Variante wurde 2007 von der Firma Sun Microsystems herausgegeben und wird aktiv von der Community weiterentwickelt. Laut Wikipedia ist “OpenJDK [is] the official reference implementation of Java SE since version 7”.

Die zweite Entwicklung betrifft die Entwicklungsumgebung NetBeans. Oracle will NetBeans “loswerden” und zu Apache abgeben (siehe Artikel auf ZDNET und Artikel auf Heise), was mittelfristig vielleicht keine schlechte Idee ist. Aber derzeit befindet sich NetBeans in einer Übergangsphase, so dass die Installation der “richtigen” NetBeans-Version umständlich und nicht unbedingt zu empfehlen ist.

Im weiteren zeige ich, wie man am besten umsteigt auf OpenJDK und IntelliJ IDEA.

Was tun?

Aufgrund der Entwicklungen habe ich zwei Empfehlungen:

  1. auf OpenJDK umsteigen (leider muss JavaFX separat eingebunden werden)
  2. die Entwicklungsumgebung IntelliJ IDEA verwenden (die community edition CE ist kostenlos)

Zu beiden Empfehlungen möchte ich ein paar Tipps geben. IntelliJ finden Sie hier: https://www.jetbrains.com/idea

OpenJDK

OpenJDK kann man hier runterladen (derzeit Version 13) unter dem Punkt Builds: http://jdk.java.net/13

Einrichtung unter Windows

Unter Windows muss man die Datei auspacken und das resultierende Verzeichnis (z.B. jdk-13.0.1) an irgendeine Stelle schieben, z.B. nach

C:\Program Files\Java

oder auch

C:\Programme\Java

Dann haben Sie dort also ein Verzeichnis

C:\Program Files\Java\jdk-13.0.1

Jetzt müssen wir Umgebungsvariablen anpassen. Dazu öffnen Sie Systemsteuerung > System und Sicherheit > System. Dort klicken Sie in der linken Leiste auf Erweiterte Systemeinstellung. Im nächsten Fenster dann auf den Button Umgebungsvariablen… (rechts unten).

Als erstes richten Sie eine neue Umgebungsvariable ein (Button Neu… drücken). Nennen Sie sie JAVA_HOME und setzen Sie sie auf den Pfad zum JDK-Verzeichnis. In unserem Beispiel wäre das:

C:\Program Files\Java\jdk-13.0.1

Als nächstes müssen Sie die existierende Variable Path (in der Liste im unteren Teilfenster) erweitern. Markieren Sie die entsprechende Zeile und drücken Sie auf Bearbeiten… . Anschließend fügen Sie mit Neu den Pfad zum bin-Verzeichnis des JDK hinzu. Dabei beziehen Sie sich auf die Variable JAVA_HOME:

%JAVA_HOME%\bin

Fertig!

Einrichtung unter MacOS

Auf einem Mac geht es einfacher. Man muss nur die OpenJDK-Datei auspacken und das resultierende Verzeichnis (z.B. jdk-13.0.1.jdk) an diese Stelle schieben:

 /Library/Java/JavaVirtualMachines

Fertig!

Falls Sie den Ordner nicht finden, schauen Sie hier: https://praxistipps.chip.de/mac-library-anzeigen-so-gehts_27990

Test, ob OpenJDK gefunden wird

Auf einer Konsole können Sie mit folgender Zeile testen, ob das JDK gefunden wird.

java --version

Sie sollten etwas in dieser Art sehen:

openjdk 12.0.1 2019-04-16
OpenJDK Runtime Environment (build 12.0.1+12)
OpenJDK 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

OpenJDK in IntelliJ

Wenn Sie in IntelliJ ein neues Java-Projekt anlegen, können Sie unter In File > Project Structure das neue JDK angeben und zwar unter Platform Settings > SDKs. Das müssen Sie nur einmalig durchführen.

Wenn Sie aus dem Code heraus testen möchten, welche SDK gerade benutzt wird, können Sie das aus den Systemproperties herauslesen:

System.out.println("Java version: " + System.getProperty("java.version"));

JavaFX

JavaFX ist die aktuellste GUI-Technologie von Java und hatte 2014 mit der Version JavaFX 8 endgültig die alte Swing-Technologie abgelöst. Wer JavaFX lernen möchte, kann sich in meinem Skript unter http://michaelkipp.de/java die Kapitel GUIs mit JavaFX (Teile 1-3) anschauen.

JavaFX ist nicht in OpenJDK enthalten! Also muss man JavaFX separat runterladen: https://gluonhq.com/products/javafx

Das entsprechende Verzeichnis (z.B. derzeit javafx-sdk-13.0.1) kann man dann irgendwo ablegen. Zum Beispiel auf einem Mac im eigenen Benutzerverzeichnis unter:

Library/javafx-sdk-13.0.1

JavaFX in IntelliJ

Will man in IntelliJ auch JavaFX verwenden, muss man eine einmalige Einrichtung vornehmen und dann bei jedem Projekt eine Anpassung durchführen.

Einmalige Einrichtung

In IntelliJ macht man einmalig folgendes (bzw. jedes Mal, wenn man JavaFX updated):

  1. In den Einstellungen (Mac: Preferences, Win: File > Settings…) wählt man: Appearance & Behavior > Path Variables
  2. Dort fügt man einen neuen Pfad hinzu (Pluszeichen unten). Diesen nennt man PATH_TO_FX und setzt ihn auf den Pfad, wo man das Verzeichnis oben hingetan hat und fügt noch ein /lib hinzu. Zum Beispiel: /Users/kipp/Library/javafx-sdk-13.0.1/lib

Wie oben schon angedeutet: Wenn Sie eine neue Version von JavaFX runterladen, müssen Sie diesen Pfad neu anpassen.

Bei jedem neuen Projekt

Immer wenn man ein neues JavaFX-Projekt anlegt, muss man folgendes tun:

  1. In File > Project Structure unter Libraries fügt man das obige /lib Verzeichnis hinzu
  2. Bei jeder Run-Konfiguration (siehe Run -> Edit Configurations…) fügt man als VM option folgendes ein:
 --module-path ${PATH_TO_FX} --add-modules=javafx.controls,javafx.fxml

Leider ist das alles etwas umständlich, aber es besteht die Hoffnung, dass JavaFX demnächst zusammen mit OpenJDK ausgeliefert wird und dass IntelliJ die Nutzung etwas vereinfacht.

Wenn Sie aus dem Code heraus testen möchten, welche JavaFX-Version gerade benutzt wird, können Sie das auch aus den Systemproperties herauslesen:

System.out.println("JavaFX version: " + System.getProperty("javafx.runtime.version"));

JavaFX hat seit neuestem eine Webpräsenz: https://openjfx.io/

Offenes Problem

Ein immer noch (Stand: 06.12.2019) offenes Problem ist das Herstellen eines JAR-Files, das man einfach verteilen kann, so dass man es einfach auf jeder Plattform öffnen/starten kann.

Hier nur ein Beispiel für eine Diskussion darüber:

https://stackoverflow.com/questions/53450011/build-and-deploy-javafx-application-using-java11