JavaFX 8 と FXML を使用して、最も単純な Hello World アプリを作成しましょう。
ファイル
src/application/Main.java
:
package application;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;
public class Main extends Application {
@Override
public void start(Stage stage) {
try {
System.out.println("Main.start()");
FXMLLoader fxml_loader = new FXMLLoader();
fxml_loader.setLocation(getClass().getResource("Sample.fxml"));
System.out.println("FXML resource URL = " + getClass().getResource("Sample.fxml"));
Parent root = fxml_loader.load();
Scene scene = new Scene(root, 300, 200);
stage.setScene(scene);
stage.setTitle("JFX HW");
stage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
src/application/Sample.fxml
:
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.StackPane?>
<StackPane xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
<children>
<Label text="Hello World" />
</children>
</StackPane>
ワークフロー
お気に入りの IDE を使用して、すべてをbin
フォルダーにコンパイルします。
$ find bin
bin
bin/application
bin/application/Main.class
bin/application/Sample.fxml
次に、jar を作成します。
$ javapackager -createjar -appclass application.Main -srcdir bin -outdir compiled -outfile jfxhw -v -manifestAttrs "Application-Name=JFXHW,Permissions=sandbox,Codebase=*"
ここで、jar ファイルが で適切に動作することを確認できますjava -jar jfxhw.jar
。
署名しましょう:
$ jarsigner compiled/jfxhw.jar MYALIAS
配備:
$ javapackager -deploy -appclass application.Main -srcdir compiled -outdir deployed -outfile index -width 300 -height 200 -name JFXHW -v
$ find deployed
deployed/
deployed/jfxhw.jar
deployed/index.jnlp
deployed/index.html
結果
コマンド:
javaws index.jnlp
失敗します (これを表示するには、コンソールを有効にする必要があります):
Main.start()
FXML resource URL = null
java.lang.IllegalStateException: Location is not set.
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2438)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2413)
at application.Main.start(Main.java:18)
:
私は何を間違っていますか?