ともさんのHP >プロブラミング >JavaFX >コントロールの初期化

【JavaFX】コントロールを初期化できないエラー

ボタンなどのコントロールを初期化しようとするとjava.lang.ExceptionInInitializerErrorというエラーが表示される、
Imageを初期化するとInternal graphics not initialized yetというエラーが出てしまう場合の対処法です。
このエラーで困ることはおそらくないと思うのですが、嵌まってしまって原因がなかなかつかめなかったのでメモ書き。
サンプルプログラム

広告


原因

Applicationクラスの外でjavafx.scene.control.Buttonなどのコントロールやjavafx.scene.image.Imageを初期化しようとするようです。
JavaFXのコントロールはApplicationの中で使うのが当然なのですが、私の場合、Swingで作ったアプリに、JavaFX楽天 のコントロールを使ったJframeを追加したときに発生しました。
エラーが発生するように超単純にサンプルプログラムを書くとこうなります。

package tomojavalib.fx;

import javax.swing.Jframe;
import javafx.embed.swing.JFXPanel;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;

public class FxFrame4 extends Jframe {

public FxFrame4(){
 this.setBounds(50,50,320,240);
 this.setBackground(java.awt.Color.WHITE);
 Image image = new Image("file:D:test.png");
 Button b = new Button("test");
 JFXPanel fxPanel = new JFXPanel();
 Group group = new Group();
 group.getChildren().add(b);
 Scene  scene  =  new  Scene( group );
 fxPanel.setScene(scene);
 this.add(fxPanel);
 this.setVisible(true);
}

public static void main(String[] args) {
 FxFrame4 f = new FxFrame4();
}

}

SwingのJframeを作り、その中で Java 楽天 FXのコントロールを利用するためにjavafx.embed.swing.JFXPanelを置いています。
こうすることでjavafx.scene.control.ButtonなどのコントロールをSwing内で利用できるようになります。

解決方法

Image、Button、JFXPanelの順で初期化していますが、この順番を変えます。

Image image = new Image("file:D:test.png");
Button b = new Button("test");
JFXPanel fxPanel = new JFXPanel();

JFXPanelを先に初期化してしまえばエラーは発生しません。

JFXPanel fxPanel = new JFXPanel();
Image image = new Image("file:D:test.png");
Button b = new Button("test");

当初はJFXPanelを先に初期化していてエラーの発生はなかったのですが、いつの間にか入れ替わってしまい、原因がわからず悩みました。

最終更新日: 2017-07-14 05:14:36

ともさんのHP >プロブラミング >JavaFX >コントロールの初期化

このエントリーをはてなブックマークに追加
新着ページ

ペットボトルを利用したスズメバチホイホイ  
シャガの栽培、手入れ、増やしかた  
自動水やり器の自作  
テキスタイルプリントでキャスケット  
竹を曲げる方法  
アサガオ、F2の特性  
日本ミツバチ巣箱の検討  
柿の枝の剪定方法  
オモトの植え替え  
テーブルソーの安全な使いかた  
初心者用巣箱その1  

他のサイト

3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます