在java(netbeans)中,图标的图像放在哪里?如何将它们链接到代码?

在java(netbeans)中,图标的图像放在哪里?如何将它们链接到代码?,java,swing,jframe,embedded-resource,imageicon,Java,Swing,Jframe,Embedded Resource,Imageicon,我正在尝试创建一个带有图标的按钮的Jframe类 public ImageIcon Flag = new ImageIcon(getClass().getResource("resources/Flag.png")); 给我一个空指针异常 “C:\Users\Khalidi\Documents\NetBeansProjects\mineswipper\resources\Flag.png” 是到达我想要的图像的完整目录 我创建了文件夹资源来存放我需要的图像 我应该把图像放在哪里?我应该写哪行

我正在尝试创建一个带有图标的按钮的Jframe类

 public ImageIcon Flag = new ImageIcon(getClass().getResource("resources/Flag.png"));
给我一个空指针异常

“C:\Users\Khalidi\Documents\NetBeansProjects\mineswipper\resources\Flag.png”

是到达我想要的图像的完整目录 我创建了文件夹资源来存放我需要的图像 我应该把图像放在哪里?我应该写哪行代码


提前感谢

当您使用
getClass().getResource()
加载映像时,JVM实际上使用您的类路径来加载资源(您应该仔细查看)


因此,要使资源可用,必须将其推送到项目输出文件夹(必须类似于
target
,否?)

当您使用
getClass().getResource()
加载图像时,JVM实际上使用您的类路径加载资源(您应该仔细查看)


因此,要使您的资源可用,您必须将其推送到项目输出文件夹(必须类似于
target
,no?)。

创建一个包,比如ImgPack,并将所有图像粘贴到此包中,然后使用

    ImageIcon ii = new ImageIcon(System.getProperty("user.dir")+"\\src\\ImgPack\\<Imagename.extention>");
ImageIcon ii=新的ImageIcon(System.getProperty(“user.dir”)+“\\src\\ImgPack\”;

创建一个包,比如ImgPack并将所有图像粘贴到此包中,然后使用

    ImageIcon ii = new ImageIcon(System.getProperty("user.dir")+"\\src\\ImgPack\\<Imagename.extention>");
ImageIcon ii=新的ImageIcon(System.getProperty(“user.dir”)+“\\src\\ImgPack\”;

尝试使用相同的方法使用包路径。 例如,如果我的图像位于org.nisheeth.resources包中,则应该按照以下方式编写

public ImageIcon flag = new ImageIcon(Test.class.getResource("/org/nisheeth/resource/Flag.png"));

尝试使用相同的方法使用包路径。 例如,如果我的图像位于org.nisheeth.resources包中,则应该按照以下方式编写

public ImageIcon flag = new ImageIcon(Test.class.getResource("/org/nisheeth/resource/Flag.png"));

当您要求约定时:使用Maven构建基础设施,您将

  • src/main/java-java包
  • src/main/resources-像图像这样的资源
  • src/main/resources/images/Flag.png-一些资源(无约定)
在您创建的jar/.class中

  • /图像/Flag.png

    public ImageIcon Flag = new ImageIcon(getClass().getResource("/images/Flag.png"));
    

这里,
Class.getResource()
使用类的包的相对路径;因此,使用上面提到的绝对路径(“/…”)是最简单的。

当您要求约定时:使用Maven构建基础设施,您将

  • src/main/java-java包
  • src/main/resources-像图像这样的资源
  • src/main/resources/images/Flag.png-一些资源(无约定)
在您创建的jar/.class中

  • /图像/Flag.png

    public ImageIcon Flag = new ImageIcon(getClass().getResource("/images/Flag.png"));
    

这里,
Class.getResource()
使用类的包的相对路径;因此,使用上面的绝对路径(“/…”)是最简单的。

您只需将文件夹资源放置到具有编译类的文件夹中,并使ImageIcon如下所示

public ImageIcon Flag = new ImageIcon("resources/Flag.png");

您只需将一个文件夹资源放置到包含编译类的文件夹中,并使ImageIcon如下所示

public ImageIcon Flag = new ImageIcon("resources/Flag.png");

将resources文件夹放在src中,并在当前使用的路径的开头使用
/
。引用了其他引用。将resources文件夹放在src中,并在当前使用的路径的开头使用
/
。引用了其他引用。虽然此答案可以从IDE中使用,它将不再工作,一旦应用程序打包成一个罐子谢谢你纠正我,我仍然是初学者。我只使用它,没有做jar包。我可以问你,如果我把我的应用程序打包到一个罐子里,为什么它不工作?当你把一个字符串传递给
ImageIcon
时,它会从工作目录开始在文件系统中查找文件。IDE中的工作目录是项目根目录。这就是为什么这将在IDE中工作。但一旦进入jar,它就变成了一个二进制资源,需要通过URL进行访问。对于OP的当前文件结构,文件甚至可能不会放入jar,除非您自定义IDE的构建配置。我通常将所有资源放在
src
的某个地方,并使用
Class.getResource(“/path/to/resources/image.png”)…其中
路径
直接位于
src
中。默认构建将把
src
中的所有内容放入类路径中。正如其他人指出的那样,您可以通过从
getResource
获取URL来访问类路径资源。有关一些好的阅读资料,请参阅。虽然此答案在IDE中有效,但一旦应用程序打包到JAR中就不再有效。谢谢您的纠正,我仍然是初学者。我只使用它,没有做jar包。我可以问你,如果我把我的应用程序打包到一个罐子里,为什么它不工作?当你把一个字符串传递给
ImageIcon
时,它会从工作目录开始在文件系统中查找文件。IDE中的工作目录是项目根目录。这就是为什么这将在IDE中工作。但是一旦进入jar,它就变成了二进制资源,需要通过URL访问。对于OP的当前文件结构,文件甚至可能不会放入jar,除非您自定义IDE的构建配置。我通常将所有资源放在
src
的某个地方,并使用
Class.getResource(“/path/to/resources/image.png”)…其中
路径
直接位于
src
中。默认构建将把
src
中的所有内容放入类路径中。正如其他人所指出的,您可以通过从
getResource
获取URL来访问类路径资源