JLabel图标未在带有Maven项目的Java上正确导入

JLabel图标未在带有Maven项目的Java上正确导入,java,swing,jlabel,embedded-resource,imageicon,Java,Swing,Jlabel,Embedded Resource,Imageicon,我正在做一个关于GUI库系统的项目。我的IDE是Netbeans。在设置外部文件夹中的Jlabel图标图像之前,我希望从项目文件夹中加载图像,因此我从NetBeans的“导入到项目”选项将图像导入到项目文件夹中。编译程序时,在Jlabelxxx.setIcon()中显示“NullPointerException”。这意味着它没有从我的包/文件夹加载图像。我知道什么是空指针异常:)。我的代码很好,但我不知道为什么没有从项目文件夹加载图像 我正在使用netbeansgui进行Jswing设计。我的目

我正在做一个关于GUI库系统的项目。我的IDE是Netbeans。在设置外部文件夹中的Jlabel图标图像之前,我希望从项目文件夹中加载图像,因此我从NetBeans的“导入到项目”选项将图像导入到项目文件夹中。编译程序时,在Jlabelxxx.setIcon()中显示“NullPointerException”。这意味着它没有从我的包/文件夹加载图像。我知道什么是空指针异常:)。我的代码很好,但我不知道为什么没有从项目文件夹加载图像

我正在使用netbeansgui进行Jswing设计。我的目录结构如下所示:

项目绝对路径:C:\Users\nisha\Documents\NetBeansProjects\LibraryManagementSystem

图像绝对路径:C:\Users\nisha\Documents\NetBeansProjects\LibraryManagementSystem\src\main\java\gpjlibrarymanagementsystem\icons

我在“LibraryManagementSystem”项目文件夹中有2个包。下面是3个包“gpjlibrarymanagementsystem”“gpjlibrarymanagementsystem.icons”。默认包没有任何内容。第二个有JFrame文件,最后一个有图像。请观看上面的图片,了解我的目录结构

我曾尝试在同一个项目中创建不同的目录,但它不起作用

获得“NullPointerException”的代码示例:

    lblMinimize.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gpjlibrarymanagementsystem/icons/icons8-minus-24.png")));

    lblMaximize.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gpjlibrarymanagementsystem/icons/icons8-maximize-button-20.png")));

    lblClose.setIcon(new javax.swing.ImageIcon(getClass().getResource("/gpjlibrarymanagementsystem/icons/icons8-multiply-24.png")));
您可以看到,根据我的目录结构,我的代码是正确的。

一个或多个:

/gpjlibrarymanagementsystem/icons/icons8-minus-24.png
/gpjlibrarymanagementsystem/icons/icons8-maximize-button-20.png
/gpjlibrarymanagementsystem/icons/icons8-multiply-24.png
错误(文件不存在),因此
getResource
返回
null

一个或多个:

/gpjlibrarymanagementsystem/icons/icons8-minus-24.png
/gpjlibrarymanagementsystem/icons/icons8-maximize-button-20.png
/gpjlibrarymanagementsystem/icons/icons8-multiply-24.png

错误(文件不存在),因此
getResource
返回
null

项目目录名(见下文)为
图标
(单数),但代码显示为
图标
(复数)


项目目录名(见下文)为
图标(单数),但代码显示为
图标(复数)


我已经解决了这个问题。图像应添加到资源文件夹中,该文件夹为:yourprojectname\src\main\resources。在我的例子中:LibraryManagementSystem\src\main\resources\icons。所有图像文件都在图标文件夹中:)

在maven中,文件结构应如下所示:

> Project |-- pom.xml `-- src
>     `-- main
>         `-- resources
但是,您的所有资源可能不在src/main/resources中。因此,您必须通过向POM添加以下内容来指定这些目录

<project>
 ...
 <build>
   ...
   <resources>
     <resource>
       <directory>[your folder here]</directory>
     </resource>
   </resources>
   ...
 </build>
 ...
</project>
可以通过执行以下操作指定该目录:

   ...
   <resources>
     <resource>
       <directory>src/my-resources</directory>
     </resource>
   </resources>
   ...
。。。
src/my资源
...
此外,通过添加多个元素,您可以拥有多个目录:

   ...
   <resources>
     <resource>
       <directory>resource1</directory>
     </resource>
     <resource>
       <directory>resource2</directory>
     </resource>
     <resource>
       <directory>resource3</directory>
     </resource>
   </resources>
   ...
。。。
资源1
资源2
资源3
...

我已经解决了这个问题。图像应添加到资源文件夹中,该文件夹为:yourprojectname\src\main\resources。在我的例子中:LibraryManagementSystem\src\main\resources\icons。所有图像文件都在图标文件夹中:)

在maven中,文件结构应如下所示:

> Project |-- pom.xml `-- src
>     `-- main
>         `-- resources
但是,您的所有资源可能不在src/main/resources中。因此,您必须通过向POM添加以下内容来指定这些目录

<project>
 ...
 <build>
   ...
   <resources>
     <resource>
       <directory>[your folder here]</directory>
     </resource>
   </resources>
   ...
 </build>
 ...
</project>
可以通过执行以下操作指定该目录:

   ...
   <resources>
     <resource>
       <directory>src/my-resources</directory>
     </resource>
   </resources>
   ...
。。。
src/my资源
...
此外,通过添加多个元素,您可以拥有多个目录:

   ...
   <resources>
     <resource>
       <directory>resource1</directory>
     </resource>
     <resource>
       <directory>resource2</directory>
     </resource>
     <resource>
       <directory>resource3</directory>
     </resource>
   </resources>
   ...
。。。
资源1
资源2
资源3
...
我经历了这些变化

我在用软件包。。。带有图标
Open.png
的软件包是
bz.usedPictures

button.setIcon(
  new javax.swing.ImageIcon(
    getClass().getResource("/bz/usedPictures/Open.png")
  )
);
我正在迁移到maven

据Maven说:

src/main/resources
应用程序/库资源

然后我将图标放在这个位置:

PROJECTNAME\src\main\resources\usedPictures\
--Open.png
清理并构建。您可以在此处查看文件的获取位置

PROJECTNAME\target\classes\usedPictures\
--Open.png
下面是使用图标的示例:

button.setIcon(
    new javax.swing.ImageIcon(
        getClass().getClassLoader().getResource("usedPictures/Open.png")
    )
);
我正在忍受这种变化

我在用软件包。。。带有图标
Open.png
的软件包是
bz.usedPictures

button.setIcon(
  new javax.swing.ImageIcon(
    getClass().getResource("/bz/usedPictures/Open.png")
  )
);
我正在迁移到maven

据Maven说:

src/main/resources
应用程序/库资源

然后我将图标放在这个位置:

PROJECTNAME\src\main\resources\usedPictures\
--Open.png
清理并构建。您可以在此处查看文件的获取位置

PROJECTNAME\target\classes\usedPictures\
--Open.png
下面是使用图标的示例:

button.setIcon(
    new javax.swing.ImageIcon(
        getClass().getClassLoader().getResource("usedPictures/Open.png")
    )
);

将图像放入名为“资源”的文件夹中,路径应为: src/main/resources/image.jpg

现在在Netbeans中单击“清理并构建项目”

创建一个标签,在IDE的帮助下放置一个图标,然后转到标签属性

完成此操作后,右键单击标签并单击“自定义代码”,然后将图标放置在标签上的部分放入“try catch”


这对我很有用,我花了一天的时间才弄明白怎么做。

将图像放在一个名为“资源”的文件夹中,路径应该是: src/main/resources/image.jpg

现在在Netbeans中单击“清理并构建项目”

创建一个标签,在IDE的帮助下放置一个图标,然后转到标签属性

完成此操作后,右键单击标签并单击“自定义代码”,然后将图标放置在标签上的部分放入“try catch”


它对我起了作用,我花了一天的时间才弄明白怎么做。

堆栈跟踪在这里:您的树图像似乎表明目录是
图标
,而不是
图标
。堆栈跟踪在这里:您的树图像似乎表明目录是
图标
,不是
图标
。你可以在这里看到它:我已经导入了所有的图像并从netbeans设置了它:),那么它怎么会错呢?你可以在这里看到它:我有