java:我不理解相对路径

7jmck4yq  于 2021-07-06  发布在  Java
关注(0)|答案(3)|浏览(592)

我有以下maven项目结构,也可以在这里看到(projectstructure):

-maws20.algorithm
 |-src/main/resources
   |-images
     |-menuBanner
       |-linearSearchMenuBannerUnsorted.png
 |-src/main/java
   |-linearSearch.menu
     |-LinearSearchMenuBanner.java

我正在尝试用以下行加载linearchermenubaner.java文件中的.png图像:

@Override
public Image loadBackgroundImage() {
   return new Image(LinearSearchMenuBanner.class.
       getResource("/images/menuBanner/linearSearchMenuBannerUnsorted.png").toString());
}

这不是正确的相对路径吗?因为我得到以下错误:

...
Caused by: java.lang.NullPointerException: Cannot invoke "java.net.URL.toString()" because the return value of "java.lang.Class.getResource(String)" is null
    at linearSearch.menu.LinearSearchMenuBanner.loadBackgroundImage(LinearSearchMenuBanner.java:20)
...

(第20行为上图所示)
我想我了解java中的相对路径
谢谢你的帮助。

r3i60tvu

r3i60tvu1#

谢谢你的帮助。我不知道出了什么问题,但是当我创建了一个全新的工作区之后,创建所有新文件并将源代码复制到新文件中。那就行了。
我不知道为什么。。。
但非常感谢:)

mznpcxlj

mznpcxlj2#

删除第一个反斜杠 / ,这实际上意味着绝对路径而不是相对路径。试试这个:

@Override
public Image loadBackgroundImage() {
    File resource = new ClassPathResource("images/menuBanner/linearSearchMenuBannerUnsorted.png").getFile();
    return new Image(new String(Files.readAllBytes(resource.toPath()));
}

要了解更多信息,您可以访问以下链接:spring classpath file access

rjzwgtxy

rjzwgtxy3#

我想这和你的 Package 有关。该图像需要在服务器文件系统,jar资源将无法工作!
类路径资源

Supports resolution as java.io.File if the class path resource resides in the file system, but not for resources in a JAR. Always supports resolution as URL.

你在包裹里 search.menu 您需要访问中的文件资源 images/menuBanner 所以您需要加载一个资源:



new ClassPathResource(“../../images/menuBanner/linearSearchMenuBannerUnsorted.png
“, LinearSearchMenuBanner
.class).getFile();




这里有其他选择:
 https://www.baeldung.com/spring-classpath-file-access

相关问题