让我们使用带有 FXML 的 JavaFX 8 创建最简单的 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
然后创建一个罐子:
$ 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)
:
我究竟做错了什么?