Donnerstag, 21. Juli 2016

JavaFX auf Raspberry - Es geht immer noch!

Hallo zusammen!

Obwohl Oracle den Support für JavaFX auf eingebetteten Systemen eingestellt hat, ist es weiterhin möglich JavaFX auf Raspberry auszuführen und nein wir nutzen dafür nicht das Gluon Plugin, auch wenn dieses nicht so schlecht ist. Wenn man nach einer Anleitung dazu sucht, findet man leider nur komplexe Tutorials die meistens wichtige Punkte auslassen oder welche, die noch aus der Zeit des offiziellen Supports von Oracle stammen. Daher habe ich mir gedacht hier nun eine schnelle und leichte Anleitung zu schreiben um JavaFX Anwendungen auf einem Raspberry Pi zum laufen zu kriegen. Hierbei sei jedoch gesagt, dass ich dies nur auf einem neuen Raspberry Pi 3 mit Raspbian ausprobiert habe und daher nicht weiß ob es auf den anderen Boards ebenfalls so funktioniert! [gehe zur englischen Version]

Okay los gehts!


Voraussetzungen Raspberry Pi

  1. JavaFX für eingebette Systeme vom OpenJFX Projekt herunterladen und kompilieren...oder die einfache Variante: Das fertige Paket von Gluon herunterladen: http://gluonhq.com/labs/javafxports/downloads/ -> JavaFX Embedded SDK
  2. Nun die dort enthaltenen Dateien in das Java SDK von Oracle auf dem Raspberry einfügen. Bei mir ist dies unter /usr/lib/jvm/ zu finden gewesen (ab sofort R_JAVA_HOME genannt). Dazu alle Dateien aus dem heruntergeladenen Paket in die entsprechenden Ordner auf dem Raspberry einfügen:
    1. armv6hf-sdk/rt/lib/ext/* wird auf dem Raspberry in R_JAVA_HOME/jre/lib/ext/* kopiert
    2. armv6hf-sdk/rt/lib/arm/* wird auf dem Raspberry in R_JAVA_HOME/jre/lib/arm/* kopiert
    3. armv6hf-sdk/rt/lib/* wird auf dem Raspberry in R_JAVA_HOME/jre/lib/* kopiert
  3. Nun sind alle notwendigen Bibliotheken für die JavaFX Anwendung vorhanden, jedoch würde man beim starten einer JavaFX Anwendung nichts zu Gesicht bekommen, da der Standard GPU Speicher zu gering ist! Daher muss dieser auf mindestens 128MB erhöht werden, dazu gibt es 2 Möglichkeiten dies zu tun und anschließend muss immer neugestartet werden:
    1. Unter "Menu" -> "Einstellungen" -> "Raspberry-Pi-Konfiguration" und dann unter "Leistung".
    2. Oder in einem Terminal "sudo raspi-config" ausführen und dort unter "Advanced Options" -> "Memory Split"
  4. Fertig, dies war alles damit der Raspberry Pi JavaFX Anwendungen ausführen kann! Um dies zu tun am besten vom X11 Desktop (STRG+ALT+F7) in den Terminal Modus wechseln (STRG+ALT+F1), da JavaFX Anwendungen so oder so den X11 deaktivieren und so die Anwendung schneller startet. Die Java Anwendung wird dann mit sudo java -jar [DATEI] ausgeführt, und ja mit sudo, da JavaFX ansonsten nicht alle Events korrekt nutzen kann.
  5. UPDATE: Inzwischen ist mir aufgefallen, dass der Bildschirmschoner JavaFX Anwendungen durcheinander bringt, daher diesen deaktivieren! Für den Terminal Modus kann dies in der Datei /etc/kbd/config gemacht werden. Dort den Wert BLANK_TIME und POWERDOWN_TIME auf 0 setzen und neustarten.

Voraussetzungen JavaFX Anwendungen


Leider funktioniert JavaFX auf dem Raspberry anders als auf dem Desktop, daher ein paar Guide Lines zum erstellen der JavaFX Anwendung:
  1. Ein-Fenster-Anwendung: Entwickelt die Anwendung wie eine Android oder IOS Anwendung, also das immer nur ein Fenster angezeigt wird, da JavaFX auf dem Raspberry es anscheinend hasst weitere Fenster anzuzeigen wie z.B. den FileChooser.
  2. Unbedingt eine Möglichkeit zum Schließen der Anwendung einbauen, da STRG+C nicht funktioniert! Im JavaFX Code lautet die Methode dazu Platform.exit().
  3. Damit die JavaFX Anwendung ausgeführt werden kann muss diese natürlich in einer ausführbaren .jar vorliegen. Ich erstelle meine immer über Maven mit Hilfe folgender Seite für die Konfiguration: https://javafx-maven-plugin.github.io/
  4. Hier darauf achten das externe Bibliotheken wie z.B. pi4j mit der Anwendung auf den Raspberry kopiert werden. Beim verwenden des oben genannten JAR-Plugin ist dies der gesamte Ordner [PROJEKT_ORDNER]\target\jfx\app, hier sind die eigentliche JavaFX Anwendung als .jar vorhanden sowie der libs Ordner, welcher die externen Bibliotheken enthält.

Das war es erstmal! Leider hatte ich noch keine Zeit mich extrem damit zu beschäftigen, aber in den nächsten Wochen möchte ich dies gerne nachholen ;) Aber als kleiner Beweis hier ein Foto, Screenshots auf dem Raspberry haben leider nicht funktioniert da dafür der X11 Desktop benötigt wird, von einer JavaFX Anwendung, welche mit Hilfe von pi4j auf die Werte des Raspberry zugreift:



Nadann viel Spaß mit JavaFX auf dem Raspberry und bis zum nächsten mal! =)

Keine Kommentare:

Kommentar veröffentlichen