title: JavaFXPorts (Gluon) on Raspberry Pi installation and run a simple JFX-programm
body: <p><strong>My Hardware:</strong></p>
  
  <ul>
  <li>Raspberry Pi 1 B+</li>
  <li><a href="https://github.com/watterott/RPi-Display" rel="nofollow noreferrer">Touch Display Watterott 320x240 FBTFT</a></li>
  <li><a href="https://www.hifiberry.com/products/dacplus/" rel="nofollow noreferrer">HifiBerry DAC+</a></li>
  </ul>
  
  <p><strong>My Software:</strong></p>
  
  <ul>
  <li>Operating System: <em>Raspbian GNU/Linux 8 (jessie Lite) [Ohne X]</em></li>
  <li>Kernel: <em>Linux 4.4.21+</em></li>
  <li>Architecture: <em>arm</em></li>
  <li>Touch Display and Hifiberry activated with Device Tree Overlay</li>
  <li>Java: <em>jdk-8u121-linux-arm32-vfp-hflt</em></li>
  <li>JavaFXPorts (Gluon): <a href="http://gluonhq.com/products/mobile/javafxports/get/" rel="nofollow noreferrer"><em>JavaFX Embedded SDK Version 8.60.8 armv6 hard float</em></a></li>
  </ul>
  
  <p><strong>What I have done so far:</strong></p>
  
  <p>First I downloaded the current JDK Version (Java 8u121 for Linux ARM 32 Hard Float ABI) from Oracel <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html" rel="nofollow noreferrer">klick</a>.</p>
  
  <p>I unpacked everything to <code>/opt/</code></p>
  
  <p>Next I installed the new Java version ...</p>
  
  <pre><code>sudo update-alternatives --install "/usr/bin/java" "java" "/opt/jdk1.8.0_121/bin/java" 1
  sudo update-alternatives --install "/usr/bin/javac" "javac" "/opt/jdk1.8.0_121/bin/javac" 1
  
  
  sudo update-alternatives --set "java" "/opt/jdk1.8.0_121/bin/java"
  sudo update-alternatives --set "javac" "/opt/jdk1.8.0_121/bin/javac"
  </code></pre>
  
  <p>When I enter now <code>java -version</code> </p>
  
  <pre><code>pi@raspberrypi:/opt $ java -version
  java version "1.8.0_121"
  Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
  Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)
  </code></pre>
  
  <p>That looks good so far, doesn't it ?</p>
  
  <p>Second I downloaded the current version of JavaFXPorts (JavaFX Embedded SDK Version 8.60.8 armv6 hard float) from Gluon <a href="http://gluonhq.com/products/mobile/javafxports/get/" rel="nofollow noreferrer">klick</a>.</p>
  
  <p>I copied the following files into the JDK directory (/opt/jdk1.8.0_121) as described <a href="http://docs.gluonhq.com/javafxports/#_getting_started" rel="nofollow noreferrer">here</a> under 2.1.4.</p>
  
  <p>armv6hf-sdk/rt/lib/ext/jfxrt.jar------------------------jre/lib/ext/</p>
  
  <pre><code>i@raspberrypi:/opt/jdk1.8.0_121/jre/lib/ext $ ls -l
  insgesamt 17140
  -rw-r--r-- 1 uucp  143 3860502 Dez 13 02:40 cldrdata.jar
  -rw-r--r-- 1 uucp  143    8286 Dez 13 02:40 dnsns.jar
  -rw-r--r-- 1 uucp  143   44516 Dez 13 02:40 jaccess.jar
  -rw-r--r-- 1 uucp  143 9771185 Mär 14 19:52 jfxrt.jar
  -rw-r--r-- 1 uucp  143 1179093 Dez 13 02:40 localedata.jar
  -rw-r--r-- 1 uucp  143     746 Dez 13 02:40 meta-index
  -rw-r--r-- 1 uucp  143 2022531 Dez 13 02:40 nashorn.jar
  -rw-r--r-- 1 uucp  143   42154 Dez 13 02:40 sunec.jar
  -rw-r--r-- 1 uucp  143  280161 Dez 13 02:40 sunjce_provider.jar
  -rw-r--r-- 1 uucp  143  251327 Dez 13 02:40 sunpkcs11.jar
  -rw-r--r-- 1 uucp  143   68924 Dez 13 02:40 zipfs.jar
  </code></pre>
  
  <p>armv6hf-sdk/rt/lib/arm/*-------------------------------jre/lib/arm/</p>
  
  <pre><code>pi@raspberrypi:/opt/jdk1.8.0_121/jre/lib/arm $ ls -l
  insgesamt 54520
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:43 client
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 jli
  -rwxr-xr-x 1 uucp  143      620 Dez 13 02:40 jvm.cfg
  -rwxr-xr-x 1 uucp  143    12458 Dez 13 02:40 libattach.so
  -rwxr-xr-x 1 uucp  143    28475 Dez 13 02:40 libawt_headless.so
  -rwxr-xr-x 1 uucp  143   603570 Dez 13 02:40 libawt.so
  -rwxr-xr-x 1 uucp  143   384820 Dez 13 02:40 libawt_xawt.so
  -rwxr-xr-x 1 uucp  143     8419 Dez 13 02:40 libbci.so
  -rwxr-xr-x 1 uucp  143   175043 Dez 13 02:40 libdcpr.so
  -rwxr-xr-x 1 uucp  143    61200 Mär 14 19:54 libdecora_sse.so
  -rwxr-xr-x 1 uucp  143    17694 Dez 13 02:40 libdt_socket.so
  -rwxr-xr-x 1 uucp  143   427804 Dez 13 02:40 libfontmanager.so
  -rwxr-xr-x 1 uucp  143    49825 Mär 14 19:54 libfxplugins.so
  -rwxr-xr-x 1 uucp  143    31428 Mär 14 19:54 libglass_monocle.so
  -rwxr-xr-x 1 uucp  143    15946 Mär 14 19:54 libglass_monocle_x11.so
  -rwxr-xr-x 1 uucp  143   194284 Mär 14 19:54 libglass.so
  -rwxr-xr-x 1 uucp  143  1676215 Mär 14 19:54 libgstreamer-lite.so
  -rwxr-xr-x 1 uucp  143   159094 Dez 13 02:40 libhprof.so
  -rwxr-xr-x 1 uucp  143    42623 Dez 13 02:40 libinstrument.so
  -rwxr-xr-x 1 uucp  143    43882 Dez 13 02:40 libj2gss.so
  -rwxr-xr-x 1 uucp  143    13521 Dez 13 02:40 libj2pcsc.so
  -rwxr-xr-x 1 uucp  143    68103 Dez 13 02:40 libj2pkcs11.so
  -rwxr-xr-x 1 uucp  143     6527 Dez 13 02:40 libjaas_unix.so
  -rwxr-xr-x 1 uucp  143    20825 Dez 13 02:40 libjava_crw_demo.so
  -rwxr-xr-x 1 uucp  143    23301 Mär 14 19:54 libjavafx_font_freetype.so
  -rwxr-xr-x 1 uucp  143    20564 Mär 14 19:54 libjavafx_font_pango.so
  -rwxr-xr-x 1 uucp  143    14950 Mär 14 19:54 libjavafx_font.so
  -rwxr-xr-x 1 uucp  143   218702 Mär 14 19:54 libjavafx_iio.so
  -rwxr-xr-x 1 uucp  143   190543 Dez 13 02:40 libjava.so
  -rwxr-xr-x 1 uucp  143     5704 Dez 13 02:40 libjawt.so
  -rwxr-xr-x 1 uucp  143   255277 Dez 13 02:40 libjdwp.so
  -rwxr-xr-x 1 uucp  143    23126 Dez 13 02:40 libjfr.so
  -rwxr-xr-x 1 uucp  143   207761 Mär 14 19:54 libjfxmedia.so
  -rwxr-xr-x 1 uucp  143 47082651 Mär 14 19:54 libjfxwebkit.so
  -rwxr-xr-x 1 uucp  143   231488 Dez 13 02:40 libjpeg.so
  -rwxr-xr-x 1 uucp  143    10601 Dez 13 02:40 libjsdt.so
  -rwxr-xr-x 1 uucp  143     9365 Dez 13 02:40 libjsig.so
  -rwxr-xr-x 1 uucp  143    66283 Dez 13 02:40 libjsoundalsa.so
  -rwxr-xr-x 1 uucp  143     5789 Dez 13 02:40 libjsound.so
  -rwxr-xr-x 1 uucp  143   331773 Dez 13 02:40 libkcms.so
  -rwxr-xr-x 1 uucp  143   328967 Dez 13 02:40 liblcms.so
  -rwxr-xr-x 1 uucp  143    48263 Dez 13 02:40 libmanagement.so
  -rwxr-xr-x 1 uucp  143   738200 Dez 13 02:40 libmlib_image.so
  -rwxr-xr-x 1 uucp  143   101978 Dez 13 02:40 libnet.so
  -rwxr-xr-x 1 uucp  143    79517 Dez 13 02:40 libnio.so
  -rwxr-xr-x 1 uucp  143    11385 Dez 13 02:40 libnpt.so
  -rwxr-xr-x 1 uucp  143    42591 Mär 14 19:54 libprism_common.so
  -rwxr-xr-x 1 uucp  143    59647 Mär 14 19:54 libprism_es2_eglfb.so
  -rwxr-xr-x 1 uucp  143    54157 Mär 14 19:54 libprism_es2_monocle.so
  -rwxr-xr-x 1 uucp  143    56508 Mär 14 19:54 libprism_sw.so
  -rwxr-xr-x 1 uucp  143     8840 Dez 13 02:40 libresource.so
  -rwxr-xr-x 1 uucp  143    53534 Dez 13 02:40 libsaproc.so
  -rwxr-xr-x 1 uucp  143    23669 Dez 13 02:40 libsctp.so
  -rwxr-xr-x 1 uucp  143   380853 Dez 13 02:40 libsplashscreen.so
  -rwxr-xr-x 1 uucp  143   238184 Dez 13 02:40 libsunec.so
  -rwxr-xr-x 1 uucp  143   408161 Dez 13 02:40 libt2k.so
  -rwxr-xr-x 1 uucp  143   165565 Dez 13 02:40 libunpack.so
  -rwxr-xr-x 1 uucp  143    46976 Dez 13 02:40 libverify.so
  -rwxr-xr-x 1 uucp  143   110763 Dez 13 02:40 libzip.so
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:43 server
  </code></pre>
  
  <p>armv6hf-sdk/rt/lib/javafx.platform.properties-----jre/lib/</p>
  
  <p>armv6hf-sdk/rt/lib/javafx.properties----------------jre/lib/</p>
  
  <p>armv6hf-sdk/rt/lib/jfxswt.jar--------------------------jre/lib/</p>
  
  <pre><code>pi@raspberrypi:/opt/jdk1.8.0_121/jre/lib $ ls -l
  insgesamt 72848
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 applet
  drwxr-xr-x 5 uucp  143     4096 Mär 14 19:54 arm
  -rw-r--r-- 1 uucp  143     1378 Dez 13 02:40 calendars.properties
  -rw-r--r-- 1 uucp  143  3135391 Dez 13 02:40 charsets.jar
  -rw-r--r-- 1 uucp  143    84311 Dez 13 02:40 classlist
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 cmm
  -rw-r--r-- 1 uucp  143     5916 Dez 13 02:40 content-types.properties
  -r--r--r-- 1 uucp  143     4122 Dez 13 02:40 currency.data
  drwxr-xr-x 2 uucp  143     4096 Mär 14 19:52 ext
  -rw-r--r-- 1 uucp  143     3901 Dez 13 02:40 flavormap.properties
  -r--r--r-- 1 uucp  143     1678 Dez 13 02:40 fontconfig.bfc
  -rw-r--r-- 1 uucp  143     1938 Dez 13 02:40 fontconfig.properties.src
  -r--r--r-- 1 uucp  143     4532 Dez 13 02:40 fontconfig.RedHat.5.bfc
  -rw-r--r-- 1 uucp  143     8841 Dez 13 02:40 fontconfig.RedHat.5.properties.src
  -r--r--r-- 1 uucp  143     4250 Dez 13 02:40 fontconfig.RedHat.6.bfc
  -rw-r--r-- 1 uucp  143     8735 Dez 13 02:40 fontconfig.RedHat.6.properties.src
  -r--r--r-- 1 uucp  143     6702 Dez 13 02:40 fontconfig.SuSE.10.bfc
  -rw-r--r-- 1 uucp  143    16772 Dez 13 02:40 fontconfig.SuSE.10.properties.src
  -r--r--r-- 1 uucp  143     7032 Dez 13 02:40 fontconfig.SuSE.11.bfc
  -rw-r--r-- 1 uucp  143    16781 Dez 13 02:40 fontconfig.SuSE.11.properties.src
  -r--r--r-- 1 uucp  143     4668 Dez 13 02:40 fontconfig.Turbo.bfc
  -rw-r--r-- 1 uucp  143     9192 Dez 13 02:40 fontconfig.Turbo.properties.src
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 fonts
  -rw-r--r-- 1 uucp  143    13962 Dez 13 02:40 hijrah-config-umalqura.properties
  drwxr-xr-x 3 uucp  143     4096 Dez 13 02:40 images
  -rw-r--r-- 1 uucp  143      992 Mär 14 19:58 javafx.platform.properties
  -rw-r--r-- 1 uucp  143       55 Mär 14 19:58 javafx.properties
  -rw-r--r-- 1 uucp  143   116446 Dez 13 02:40 jce.jar
  -rwxr-xr-x 1 uucp  143     7978 Dez 13 02:40 jexec
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 jfr
  -rw-r--r-- 1 uucp  143   560581 Dez 13 02:40 jfr.jar
  -rw-r--r-- 1 uucp  143      521 Mär 14 19:59 jfxswt.jar
  -rw-r--r-- 1 uucp  143   647051 Dez 13 02:40 jsse.jar
  -rw-r--r-- 1 uucp  143     4226 Dez 13 02:40 jvm.hprof.txt
  -rw-r--r-- 1 uucp  143     2455 Dez 13 02:40 logging.properties
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 management
  -rw-r--r-- 1 uucp  143      381 Dez 13 02:40 management-agent.jar
  -rw-r--r-- 1 uucp  143     2034 Dez 13 02:40 meta-index
  -rw-r--r-- 1 uucp  143     4464 Dez 13 02:40 net.properties
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 oblique-fonts
  -rw-r--r-- 1 uucp  143    10393 Dez 13 02:40 psfontj2d.properties
  -rw-r--r-- 1 uucp  143     2796 Dez 13 02:40 psfont.properties.ja
  -rw-r--r-- 1 uucp  143  3505335 Dez 13 02:40 resources.jar
  -rw-r--r-- 1 uucp  143 66152504 Dez 13 02:40 rt.jar
  drwxr-xr-x 2 uucp  143     4096 Dez 13 02:40 security
  -rw-r--r-- 1 uucp  143     1210 Dez 13 02:40 sound.properties
  -rw-r--r-- 1 uucp  143   104311 Dez 13 02:40 tzdb.dat
  </code></pre>
  
  <p>I hope I added on all copied files the right access rights and group memberships ?</p>
  
  <p>As mentioned above I use Raspbian Lite, where the Pango package is missing. I have read I need that for OpenJFX <a href="https://wiki.openjdk.java.net/display/OpenJFX/OpenJFX+on+the+Raspberry+Pi" rel="nofollow noreferrer">klick</a>. So I installed it with </p>
  
  <pre><code>sudo apt-get install libpango-1.0-0:armhf libpangoft2-1.0-0:armhf
  </code></pre>
  
  <p>As programming environment I am using <strong>Netbeans 8.2</strong> running on my home PC.</p>
  
  <p>First I made a normal "Hallo World" Programm and that worked very good on the Raspberry Pi.</p>
  
  <p>Then a very simpel JavaFX Programm build in Netbeans on my home PC and transfer to the Raspberry Pi (to dir: /home/pi/Netbeans)</p>
  
  <pre><code>/*
   * To change this license header, choose License Headers in Project Properties.
   * To change this template file, choose Tools | Templates
   * and open the template in the editor.
   */
  package javafxbasic;
  
  import javafx.application.Application;
  import javafx.event.ActionEvent;
  import javafx.event.EventHandler;
  import javafx.scene.Scene;
  import javafx.scene.control.Button;
  import javafx.scene.layout.StackPane;
  import javafx.stage.Stage;
  
  /**
   *
   * @author zimt
   */
  public class JavaFXbasic extends Application {
  
      @Override
      public void start(Stage primaryStage) {
          Button btn = new Button();
          btn.setText("Say 'Hello World'");
          btn.setOnAction(new EventHandler&lt;ActionEvent&gt;() {
  
              @Override
              public void handle(ActionEvent event) {
                  System.out.println("Hello World!");
              }
          });
  
          StackPane root = new StackPane();
          root.getChildren().add(btn);
  
          Scene scene = new Scene(root, 320, 240);
  
          primaryStage.setTitle("Hello World!");
          primaryStage.setScene(scene);
          primaryStage.show();
      }
  
      /**
       * @param args the command line arguments
       */
      public static void main(String[] args) {
          launch(args);
      }
  
  }
  </code></pre>
  
  <p>Executed from my home PC over SSH with the command <code>sudo java -jar JavaFXbasic.jar</code></p>
  
  <p><strong>And I always see this Error on the Raspberry Pi</strong> ...(<strong>Note:</strong> <em>The .jar-File is working on my home PC !</em>)</p>
  
  <pre><code>Exception in Application start method
  java.lang.reflect.InvocationTargetException
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:498)
          at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
          at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:498)
          at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
  Caused by: java.lang.RuntimeException: Exception in Application start method
          at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
          at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$156(LauncherImpl.java:182)
          at java.lang.Thread.run(Thread.java:745)
  Caused by: java.lang.ExceptionInInitializerError
          at javafx.scene.Node.reapplyCss(Node.java:8983)
          at javafx.scene.Node.impl_reapplyCSS(Node.java:8946)
          at javafx.scene.Node.invalidatedScenes(Node.java:854)
          at javafx.scene.Node.setScenes(Node.java:919)
          at javafx.scene.Scene$9.invalidated(Scene.java:1119)
          at javafx.beans.property.ObjectPropertyBase.markInvalid(ObjectPropertyBase.java:111)
          at javafx.beans.property.ObjectPropertyBase.set(ObjectPropertyBase.java:146)
          at javafx.scene.Scene.setRoot(Scene.java:1072)
          at javafx.scene.Scene.&lt;init&gt;(Scene.java:347)
          at javafx.scene.Scene.&lt;init&gt;(Scene.java:223)
          at javafxbasic.JavaFXbasic.start(JavaFXbasic.java:37)
          at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$163(LauncherImpl.java:863)
          at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$176(PlatformImpl.java:326)
          at com.sun.javafx.application.PlatformImpl.lambda$null$174(PlatformImpl.java:295)
          at java.security.AccessController.doPrivileged(Native Method)
          at com.sun.javafx.application.PlatformImpl.lambda$runLater$175(PlatformImpl.java:294)
          at com.sun.glass.ui.monocle.RunnableProcessor.runLoop(RunnableProcessor.java:92)
          at com.sun.glass.ui.monocle.RunnableProcessor.run(RunnableProcessor.java:51)
          ... 1 more
  Caused by: java.lang.NullPointerException
          at com.sun.javafx.font.PrismFontLoader.loadFont(PrismFontLoader.java:196)
          at javafx.scene.text.Font.&lt;init&gt;(Font.java:319)
          at javafx.scene.text.Font.getDefault(Font.java:86)
          at javafx.scene.CssStyleHelper.&lt;clinit&gt;(CssStyleHelper.java:1528)
          ... 19 more
  Exception running application javafxbasic.JavaFXbasic
  </code></pre>
  
  <p>I don't really understand the error message from Java ... I think I did something wrong or forgot something installing JavaFXPorts ?</p>
  
  <p>How does my system know there is OpenJFX now ? I have not run any install command or similar ... or edit the classpath.</p>
  
  <p>thanks for reading</p>