我正在尝试在JFrame上设置左上角的图像。但是,它声称我的PNG文件是不存在的。我用
设置了图标mainFrame.setIconImage(new ImageIcon(getClass().getResource("C:/Users/Steve/Programming/Projects/Java/BibleReader/bibleReader/src/test/resources/assets/bible/textures/icon.png")).getImage());
这是错误
Exception in thread "main" java.lang.NullPointerException at
javax.swing.ImageIcon.<init>(Unknown Source) at
com.nickson.input.UI.prepareGUI(UI.java:42) at
com.nickson.input.UI.<init>(UI.java:33) at
com.nickson.main.Engine.main(Engine.java:19)
为什么会这样?
答案 0 :(得分:3)
为什么会这样?
您正在尝试使用文件系统中的路径打开资源。资源路径应该相对于应用程序类路径上的目录或JAR文件。
因此,在您的特定情况下,类加载器正在查找相对于当前类的资源位置的名为“C:”的资源文件夹。当然,它不存在。如果getResource
无法找到资源,null
会返回"/assets/bible/textures/icon.png"
,这会导致NPE。
以下是几页,详细说明了资源加载和资源路径解析的实际工作原理:
作为猜测,并假设您正在使用Maven,我认为如果您的代码在单元测试中运行,路径.../main/resources/
将起作用。对于生产代码,我认为你的资源在错误的树中;它应该在{{1}}树中。