最近嘗試在Raspberry Pi 3b 上使用Raspberry Pi OS來執行之前寫好的JavaFx 8應用程式,不過遇到了許多障礙,有的是找不到套件庫、有的是找不到類別,總而言之就是無法順利執行。
目前Raspberry Pi OS內建的JAVA為11版,其實也有內建JavaFx (openjfx),但也許是版本相容性的關係,有些程式能開啟卻無法正確執行(尤其是有另外安裝套件庫的)。
因為這篇文章主要是執行現有的JavaFx 8應用程式,所以完全拋棄內建安裝的Java,重新來過。
1.檢查現在的Java版本:
pi@raspberrypi:~ $ java -version openjdk version "11.0.9.1" 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-post-Raspbian-1deb10u2) OpenJDK Server VM (build 11.0.9.1+1-post-Raspbian-1deb10u2, mixed mode)
這邊可以看到,使用的版本為:11.0.9.1
2.安裝舊版Java:
sudo apt update sudo apt install openjdk-8-jdk
ps.如何移除舊版Java?
移除預設的Java
sudo apt remove default-jdk
移除指定的Java
sudo apt remove openjdk-8-jdk
3.將Java 8設定為預設Java:
pi@raspberrypi:~ $ sudo update-alternatives --config java 替代項目 java(提供 /usr/bin/java)有 2 個選擇。 選項 路徑 優先權 狀態 ------------------------------------------------------------ * 0 /usr/lib/jvm/java-11-openjdk-armhf/bin/java 1111 自動模式 1 /usr/lib/jvm/java-11-openjdk-armhf/bin/java 1111 手動模式 2 /usr/lib/jvm/java-8-openjdk-armhf/jre/bin/java 1081 手動模式 按下 <enter> 鍵以保留目前選項[*],或是輸入選擇編號:
以我的機位為例,就是輸入2
4.確認版本
再輸入一次java -version來確認目前執行的Java版本
pi@raspberrypi:~ $ java -version openjdk version "1.8.0_212" OpenJDK Runtime Environment (build 1.8.0_212-8u212-b01-1+rpi1-b01) OpenJDK Client VM (build 25.212-b01, mixed mode)
這樣子就切換過來了!
這邊可以發現,目前的Java環境版本為build 1.8.0_212-8u212,不支援JavaFx,所以我們要另外下載JavaFx。
到Gluon的網站中下載ARM版的JavaFx:https://gluonhq.com/products/mobile/javafxports/get/
版本為:8.60.12
下載後解壓縮到方便的地方,會有個資料夾叫做armv6hf-sdk
到目前為止,Java的環境與JavaFx的SDK都準備好了,可以用以下指令來執行看看
架構:
-Djava.ext.dirs=<path to armv6hf-sdk>/rt/lib/ext
以我的機器為例:
sudo java -Djava.ext.dirs=/home/pi/Desktop/armv6hf-sdk/rt/lib/ext -jar /home/pi/Desktop/JavaFXApp/JavaFXApp.jar
這邊建議用sudo執行,如果程式有用到i/o的功能,可能會有權限不足的情形發生。
成功!!
目前遇到的問題為:畫面位置會整個跑掉,程式以外的部分全部變黑色,有可能造成程式無法退出,只能強制斷電。
ps.將armv6hf-sdk的資料整合至現有的Java中就不用每次都用這麼長的指令:
cd armv6hf-sdk sudo mv lib/javafx-mx.jar /opt/jdk1.8.0_111/lib/ cd rt/lib/ sudo mv j* /opt/jdk1.8.0_111/jre/lib/ sudo mv arm/* /opt/jdk1.8.0_111/jre/lib/arm/ sudo mv ext/* /opt/jdk1.8.0_111/jre/lib/ext/
~待更新~
發佈留言