質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Q&A

1回答

1849閲覧

Raspberry Pi 1 Model B でのJavaFXの実現

teratail2020

総合スコア9

Raspbian

Raspbianは、DebianベースのRaspberry Pi用ディストリビューション。ハードウェア浮動小数点演算を有効にすることが可能で、Webブラウズなどの速度を向上できます。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

0グッド

0クリップ

投稿2020/08/06 01:16

前提・実現したいこと

Raspbian os搭載のRaspberry Pi 1 Model B にJavaFXをインストールしjarファイルを動作させることを目指しています。現在、以下のサイトを参考にしてopenjdk 8、openjfxのインストールを実施しました。
https://gist.github.com/jiro4989/ce33b26cc6136171ad1e8804dddf2b21
その後、以下の出力が得られました。

pi@raspberrypi:~ $ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build1.8.0_212-8u212-b01-1+rpi1-b01)
OpenJDK client VM (build 25.212-b01, mixed mode)

pi@raspberrypi:~ $ apt search openjfx
ソート中... 完了
全文検索... 完了
libopenjfx-java/stable,now 11.0.2+1-1 all [インストール済み、自動]
JavaFX/OpenJFX - Rich client application platform for Java (Java libraries)

libopenjfx-java-doc/stable 11.0.2+1-1 all
JavaFX/OpenJFX - Rich client application platform for Java (Javadoc)

libopenjfx-jni/stable,now 11.0.2+1-1 armh [インストール済み、自動]
JavaFX/OpenJFX - Rich client application platform for Java (native libraries)

openjfx/stable,now 11.0.2+1-1 armhf [インストール済み]
JavaFX/OpenJFX - Rich client application platform for Java

openjfx-source/stable,now 11.0.2+1-1 all [インストール済み、自動]
JavaFX/OpenJFX - Rich client application platform for Java (sources)

以上よりjdkおよびjavafxのインストールは上手くいっているように見えます。
この状態でeclipseでfxmlを元にGUIを構築するデフォルトコード(1)、(2)をコンパイルし、実行可能なjarファイルを作成しました。このjarファイルはwindows 10上で正常に起動しました。
イメージ説明

しかし、RPi上で上記のjarファイルを実行した場合画面表示が以下のようになりました。
イメージ説明

中心部分に長方形のフォームが形成されているのは問題ないのですが、その周囲が黒色で塗りつぶされています。またタイトルバーも表示されず、フォームの拡大縮小、移動、xボタンによるプログラムの終了ができません。この問題に対する解決策をご教授願います。

※System.out.println関数を用いたところcui部分は正常に動作しているのが確認できました。

該当のソースコード

java

1//デフォルトコード(1)Main.java 2package application; 3 4import javafx.application.Application; 5import javafx.stage.Stage; 6import javafx.scene.Scene; 7import javafx.scene.layout.AnchorPane; 8import javafx.fxml.FXMLLoader; 9 10 11public class Main extends Application { 12 @Override 13 public void start(Stage primaryStage) { 14 try { 15 AnchorPane root = (AnchorPane)FXMLLoader.load(getClass().getResource("Sample.fxml")); 16 Scene scene = new Scene(root,400,400); 17 scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm()); 18 primaryStage.setScene(scene); 19 primaryStage.show(); 20 } catch(Exception e) { 21 e.printStackTrace(); 22 } 23 } 24 25 public static void main(String[] args) { 26 launch(args); 27 } 28} 29 30 31//デフォルトコード(2)Controller.java 32package application; 33 34public class SampleController { 35 36} 37

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiketa

2020/08/08 02:03

> $ java -version > openjdk version "1.8.0_212" 関係ないとはおもいますが、ここの部分が気になります。リンク先では、 > $ java -version > openjdk version "11.0.3" 2019-04-16
teratail2020

2020/08/08 09:21

アドバイスありがとうございます。 openjava version 11はインストールはできるのですが、"java -version"コマンドを実行するとARMv6は対象外ですとの警告が出ました。※うろ覚えなのですがARMv7以上で実行するようにとの指示だったかもしれません。
teratail2020

2020/08/11 12:23

追記です。 SwingでJframeを表示するプログラムは正常に表示されました。JREは問題なく、やはりJavaFXでのみ問題が発生しているようです。
guest

回答1

0

しばらく放置してあった環境があったので試してみた。

https://www.itmedia.co.jp/news/articles/2006/05/news031.htmlのとおり、まっさらの環境をRaspberry Pi Imagerで作成した。選択したOSは、Raspbian。

試した環境

$ uname -a Linux raspberrypi 5.4.51+ #1333 Mon Aug 10 16:38:02 BST 2020 armv6l GNU/Linux $ cat /proc/cpuinfo processor : 0 model name : ARMv6-compatible processor rev 7 (v6l) BogoMIPS : 697.95 Features : half thumb fastmult vfp edsp java tls CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xb76 CPU revision : 7 Hardware : BCM2835 Revision : 000d Serial : 00000000abeb1e14 Model : Raspberry Pi Model B Rev 2

jdk11, openjfxをインストール。

$ sudo apt-get install openjdk-11-jdk openjfx $ java -version Error occurred during initialization of VM Server VM is only supported on ARMv7+ VFP

JavaFXどころか、javaコマンドすら実行できない。jdk11では、だめでした。

おそらくは、これ↓のこと。

@teratail2020

2020/08/08 18:21
openjava version 11はインストールはできるのですが、"java -version"コマンドを実行するとARMv6は対象外ですとの警告が出ました。※うろ覚えなのですがARMv7以上で実行するようにとの指示だったかもしれません。

jdk8をインストール。

$ sudo apt-get install openjdk-8-jdk $ export PATH=/usr/lib/jvm/java-8-openjdk-armhf/bin:$PATH $ which java /usr/lib/jvm/java-8-openjdk-armhf/bin/java $ 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) $ javac -version javac 1.8.0_212

openjfxをインストール。

https://gluonhq.com/products/mobile/javafxports/get/からJavaFX Embedded SDKをダウンロード

Using JavaFX on Raspberry Pi 3 with Gluonを参考に。

Installation of JavaFX Although Java 8 contains JavaFX by default, it does not contain what is needed to have JavaFX applications running on the Raspberry Pi. For this, you need the Gluon JavaFX Embedded SDK. Download it from http://gluonhq.com/products/mobile/javafxports/get/ Copy it to the Pi: scp armv6hf-sdk-8.60.9.zip pi@192.168.1.60: On the Pi itself, unzip it and copy the unzipped files onto the just installed Java SDK. Take note of what parts need to be copied where! $ unzip armv6hf-sdk-8.60.9.zip $ cp armv6hf-sdk/rt/lib/ext/jfxrt.jar /opt/jdk8/jre/lib/ext/ $ cp armv6hf-sdk/rt/lib/arm/* /opt/jdk8/jre/lib/arm/ $ cp armv6hf-sdk/rt/lib/javafx.platform.properties /opt/jdk8/jre/lib/ $ cp armv6hf-sdk/rt/lib/javafx.properties /opt/jdk8/jre/lib/ $ cp armv6hf-sdk/rt/lib/jfxswt.jar /opt/jdk8/jre/lib/

compile

$ cat HelloFX.java import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.VBox; import javafx.stage.Stage; public class HelloFX { public static void main(final String[] args) throws Exception { Application.launch(App.class, args); } public static class App extends Application { @Override public void start(final Stage stage) throws Exception { final Label label = new Label("This is label"); final Button button = new Button("BUTTON"); stage.setScene(new Scene(new VBox(label, button))); stage.setTitle(HelloFX.class.getName()); stage.setWidth(600); stage.setHeight(400); stage.show(); } } } $ javac HelloFX.java $ ls -l -rw-r--r-- 1 pi pi 1008 8月 18 22:30 'HelloFX$App.class' -rw-r--r-- 1 pi pi 468 8月 18 22:30 HelloFX.class -rw-r--r-- 1 pi pi 751 8月 18 17:12 HelloFX.java

go

$ java HelloFX Udev: Failed to write to /sys/class/input/input3/uevent Check that you have permission to access input devices java.io.FileNotFoundException: /sys/class/input/input3/uevent (許可がありません) at java.io.FileOutputStream.open0(Native Method) ...

いろいろとエラーは出ますが、画面も表示されました。使い物になるかどうかは、ご自分でご判断ください。

投稿2020/08/18 13:48

shiketa

総合スコア3971

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teratail2020

2020/08/26 11:46

対応策を探してくださりありがとうございます。 ご指摘の方法を試してみましたが、同じようなエラー(エラー量が多すぎて記録しきれない)と同じ画面が出力されました。 もしかするとfxmlを読み込む方式ではだめなのかもしれません。 次はshiketaがコンパイルされたfxml非ロード型で試してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問