我想做一个"登录"在Scene Builder enter image description here中看起来像这样的框,但是当我在主程序中按run时它给了我很多错误,我看到(使用调试器)它找不到fxml文件的路径。为什么?
这是我的主要
public class Main extends Application{
@Override
public void start(Stage primaryStage) throws Exception {
primaryStage = primaryStage;
primaryStage.setTitle("Application");
Scene scene = new Scene(initRootLayout());
primaryStage.setScene(scene);
primaryStage.show();
}
public AnchorPane initRootLayout() {
try {
//Load root layout from fxml file.
FXMLLoader loader = new FXMLLoader();
loader.setLocation(Main.class.getResource("/D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml"));
AnchorPane rootLayout = (AnchorPane) loader.load();
// BorderPane rootLayout = (BorderPane) loader.load();
return rootLayout;
} catch (IOException e) {
System.out.println("Muie");
}
return null;
}
public static void main(String[] args) {
launch(args);
}
}
此照片中可以看到 Login.fxml enter image description here
而不是 /D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml" 我也试过
* D:/Faculta/Lab_ISS/src/main/java/view_FXML/Login.fxml(没有第一个/)
view_FXML / Login.fxml
的java / view_FXML / Login.fxml
主/ JAVA / view_FXML / Login.fxml
d:\\ Faculta \\ Lab_ISS \\ SRC \主\\的java \\ view_FXML \\ Login.fxml *
答案 0 :(得分:0)
将Login.fxml
文件移至src/main/resources
并使用Main.class.getResource("/Login.fxml");
获取资源
答案 1 :(得分:0)
路径不正确。请考虑JavaDoc of Class
, function getResource
。
查找具有给定名称的资源。搜索与给定类关联的资源的规则由类的定义类加载器实现。该方法委托给该对象的类加载器。如果此对象由引导类加载器加载,则该方法委托给ClassLoader.getSystemResource(java.lang.String)。 在委派之前,使用此算法从给定的资源名称构造绝对资源名称:
如果名称以' /'开头。 (' \ u002f'),然后资源的绝对名称是' /'之后的名称部分。
否则,绝对名称的格式如下: modified_package_name /名称 其中modified_package_name是此对象的包名称,其中包含' /'取代'。' (' \ u002e&#39)。
答案 2 :(得分:0)
从硬编码路径中检索资源是有问题的。而是创建一个名为" resource"的源文件夹。 (如何执行此操作取决于您是否使用IDE,还可以在src文件夹中创建该文件夹。)这样,资源将通过构建和打包过程跟踪您的代码。
要查找您的资源,请查看ClassLoader类' getResource()方法。这将在类路径中搜索您指定的路径,并为您提供一个URL,您可以将其转换为URI。然后,使用新的文件(uri)或类似的方法。
答案 3 :(得分:0)
您的问题在于以下细分
Main.class.getResource(String path)
路径不应该是设备上的绝对路径,它应该是相对于类路径的路径。因此,您需要将xml复制到运行项目的同一文件夹中。