我的项目myproject / fxml / myScreen.fxml中有一个FXML文件,我尝试用FXMLLoader加载它:
content.getChildren().setAll(FXMLLoader.load(new URL("myproject/fxml/myScreen.fxml")));
但后来我得到了这个例外,
`java.net.MalformedURLException: no protocol: myproject/fxml/myScreen.fxml`
有人能告诉我哪里错了吗?
谢谢。
答案 0 :(得分:0)
让你的ClassLoader将它作为一个资源加载(假设jar在你的类路径上/使用与当前类相同的类加载器)并将其作为流提供:
content.getChildren().setAll(FXMLLoader.load(this.getClass().getResourceAsStream("myproject/fxml/myScreen.fxml")));
答案 1 :(得分:0)
您收到错误,因为您尚未在传递给URL()
的参数中定义协议。
它通常接受HTTP/File
地址。如果要加载文件,则需要在字符串中添加file:
前缀。
加载您可以使用的本地计算机中存在的文件的正确方法:
FXMLLoader.load(new URL("file://myproject/fxml/myScreen.fxml"));
最佳方式
要加载jar中存在的文件,最好的方法是在FXMLLoader.load()中使用getClass.getResource(PATH_TO_FXML)
由于您直接加载fxml并将其分配给内容,因此您必须使用FXMLLoader的非静态load()。
FXMLLoader loader = new FXMLLoader(getClass().getResource("/myproject/fxml/myScreen.fxml"));
content.getChildren().setAll(loader.load());
答案 2 :(得分:0)
根据Oracle文档: Example
public static void main(String[] args) {
Application.launch(FXMLExample.class, args);
}
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("fxml_example.fxml"));
stage.setTitle("FXML Welcome");
stage.setScene(new Scene(root, 300, 275));
stage.show();
}