找不到文件的路径。为什么?

时间:2018-03-27 16:50:30

标签: java intellij-idea fxml scenebuilder

我想做一个"登录"在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 *

4 个答案:

答案 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_pa​​ckage_name /名称   其中modified_pa​​ckage_name是此对象的包名称,其中包含' /'取代'。' (' \ u002e&#39)。

  •   

答案 2 :(得分:0)

从硬编码路径中检索资源是有问题的。而是创建一个名为" resource"的源文件夹。 (如何执行此操作取决于您是否使用IDE,还可以在src文件夹中创建该文件夹。)这样,资源将通过构建和打包过程跟踪您的代码。

要查找您的资源,请查看ClassLoader类' getResource()方法。这将在类路径中搜索您指定的路径,并为您提供一个URL,您可以将其转换为URI。然后,使用新的文件(uri)或类似的方法。

答案 3 :(得分:0)

您的问题在于以下细分

Main.class.getResource(String path)

路径不应该是设备上的绝对路径,它应该是相对于类路径的路径。因此,您需要将xml复制到运行项目的同一文件夹中。