代码之家  ›  专栏  ›  技术社区  ›  Cody Ferguson

java中的相对路径不正确

  •  0
  • Cody Ferguson  · 技术社区  · 6 年前

    // creating newUniversePane
    Scene newUniverseScene = new Scene(newUniversePane, 300, 200);
    Class<? extends WorldNoteOrganizerMainController> aClass = getClass();
    URL resource = aClass.getResource("../../resources/css/main.css");
    String s = resource.toExternalForm();
    newUniverseScene.getStylesheets().add(s);
    //more code
    

    因此,通过查看堆栈溢出的许多示例,似乎我的相对路径是正确的。但是,当我运行这个程序,它到达这个代码时,它会给我一个错误(我试图将css添加到一个场景中,这个场景将作为弹出窗口添加到一个阶段中)

    错误消息:

    原因:java.lang.NullPointerException controller.WorldNoteOrganizerMainController.handleNewUniverse(WorldNoteOrganizerMainController.java:169)

    此错误指向行:

    String s = resource.toExternalForm();
    

    实际一行代码:

    newUniverseScene.getStylesheets().add(getClass().getResource("/../../resources/css/main.css").toExternalForm();
    

    尝试的路径:

    URL resource = aClass.getResource("/../resources/css/main.css");
    URL resource = aClass.getResource("/resources/css/main.css");
    

    层次结构快照:

    enter image description here

    3 回复  |  直到 6 年前
        1
  •  2
  •   moilejter    6 年前

    你需要知道你的应用在哪个文件夹,什么时候运行,以及你如何查找它。使用 this.getClass().getResource() 查找是相对于类文件本身的位置进行的,如果路径以“/”以外的任何内容开头,则当路径以“/”开头时,假定它是一个“绝对”路径,并且它将从类路径的“顶部”开始(在Eclipse中应该是“目标”文件夹)。因此-在您的情况下,您可能需要使用“/css/main.css”(因为src/main/resources/*将被复制到target/)-正如下面指出的,“相对路径”在这里没有意义。

        2
  •  1
  •   Ali    6 年前

    使用相对路径时,请使用以下命令:

    aClass.getClassLoader().getResource("relative-path");
    

    如果您使用的是Intellij,则有一个选项通过右键单击文件提供相对路径。

        3
  •  1
  •   Ahmed Emad    6 年前

    将资源文件夹指定为 Inillj IDEA (黄色的小图标)然后呼叫 getClass().getResources() 它会把你放在资源目录中,所以你只需使用 getClass().getResources("css/main.css")