JavaFx 2.x はじめました
半年くらい前に JavaFx 2.x のちょっとしたサンプルを作った程度でした。
アプリを作る必要があったので、JavaFx に再チャレンジしてます。
まずは簡単なサンプルをつくる
入門系のサイトのサンプルコードを拝借しながら Groovy で書いてます。
class Sample extends Application { @Override void start(Stage stage) { stage.title = "Sample" Parent parent = FXMLLoader.load(getClass().getResource("sample.fxml")) Scene scene = new Scene(parent) stage.scene = scene stage.show() } static void main(String... args) { launch(args) } }
つづいて、画面レイアウトの FXML です。
<?xml version="1.0" encoding="UTF-8"?> <?import java.lang.*?> <?import java.util.*?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <?import javafx.scene.paint.*?> <AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml"> <children> <TextField id="textField1" layoutX="42.0" layoutY="48.0" prefWidth="200.0" text="TextField" /> <Button id="button1" layoutX="42.0" layoutY="152.0" text="Button" /> </children> </AnchorPane>
FXML は Scene Builder を使って、Drag&Drop で作りました。かんたん、かんたん。
Sample クラスを実行すると…
例外が発生しました (~_~;)
Exception in thread "main" java.lang.RuntimeException: Error: class sun.reflect.NativeMethodAccessorImpl is not a subclass of javafx.application.Application
サンプルコードとの違いは、Sample クラスが Java ではなく Groovy である点。
ということで、Sample2.java を作って、中身おなじで実行してみたら JavaFx 動きました。
launch メソッドでクラス指定が必要
調べてみると javafx.application.Application#launch(String…) ではなく、
javafx.application.Application#launch(Class, String…) を呼び出せばいいとのこと。
http://www.dreamchain.com/javafx-and-groovy-exception/
static void main(String... args) { launch(Sample.class, args) }
と修正して実行してみると、無事 JavaFx 動きました。
困ったことを解決できたので、ブログに書いてメモです。
本当は…
GroovyFx を使いたいのですが、まだまだ情報量が少ないので断念です。