因此,我当然会直接创建一个简单的示例。
public class Main extends Application {
URL bla = getClass().getResource("/sample.fxml");
@Override
public void start(Stage primaryStage) throws Exception{
//If you get weird errors: http://zenjava.com/javafx/maven/fix-classpath.html
//but not actually my issue. Example displays fine in intellij.
try {
FXMLLoader loader = new FXMLLoader(bla);
Parent root = loader.load(bla);
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root));
primaryStage.show();
Controller controller = loader.<Controller>getController() ;
assert(controller != null);
controller.getLabel().setText("Kaboom!");
} catch (Exception e) {
// Exception gets thrown if the fxml file could not be loaded
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}
我已阅读https://forums.oracle.com/thread/2317621 并且我知道顶部锚窗格需要指向我在 fxml 中的控制器。
<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="800.0" xmlns:fx="http://javafx.com/fxml" fx:controller="mypackage.Controller">
<children>
它显示得很好,但是断言被捕获,因为没有控制器!
也initialize()
确实运行,这意味着创建了以下控制器!
public class Controller {
@FXML
private Label label ;
public Label getLabel()
{
return label ;
}
@FXML
public void initialize()
{
System.out.println("Swear a lot!");
System.out.println(label);
}
}
如果您正在观看此内容,请向 FX 开发人员说明:
如果您要在指向类的 xml 文件中包含弱耦合字符串,我真的希望 .load() 如果找不到它正在寻找的内容,它会抛出一个有意义的运行时异常。没有任何理由返回 null ......理想情况下,从 GWT 小部件团队获取一个页面,并在您的程序实际运行之前让预编译器失败,或者在流行的 IDE 中使用最好的插件。
此外,您真的应该尽快为 JavaFX 启动并运行 JavaFX 的源代码(将其放入 Maven 中),这样它就可以自动下载,我可以自己找出问题所在。太难。
我敢肯定我做错了一些简单的事情,但是这些工具应该可以使我摆脱困境。