设置图标时出现java.lang.NullPointerException?

设置图标时出现java.lang.NullPointerException?,java,Java,我最近尝试用自己制作的.ico文件设置默认应用程序图标。这是我用来创建图标的代码: initComponents(); java.net.URL url = ClassLoader.getSystemResource("/src/calculatormedii/resources/CMedii.ico"); Toolkit kit = Toolkit.getDefaultToolkit(); Image img = kit.createImage(url); getFrame().setIcon

我最近尝试用自己制作的.ico文件设置默认应用程序图标。这是我用来创建图标的代码:

initComponents();
java.net.URL url = ClassLoader.getSystemResource("/src/calculatormedii/resources/CMedii.ico");
Toolkit kit = Toolkit.getDefaultToolkit();
Image img = kit.createImage(url);
getFrame().setIconImage(img);
我不知道为什么在netbeans中设置java桌面应用程序图标如此困难,它应该像其他字段一样是一个属性字段。 当我尝试运行程序时,会出现以下错误:

    Uncaught error fetching image:
java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:99)
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:113)
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:240)
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:172)
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:136)

不知道现在该怎么办。如果有其他方法来设置应用程序图标,请指定它(如netbeans中的属性字段或其他内容)

我强烈怀疑这是您正在使用的URL。使用
ClassLoader.getSystemResource
,您不需要一个前导斜杠-但我非常怀疑您是否需要
src
部分。您应该确保将图标复制到类文件所在的位置(例如
bin
目录),然后只需使用:

URL url = ClassLoader.getSystemResource("calculatormedii/resources/CMedii.ico");

我强烈怀疑这是你正在使用的URL。使用
ClassLoader.getSystemResource
,您不需要一个前导斜杠-但我非常怀疑您是否需要
src
部分。您应该确保将图标复制到类文件所在的位置(例如
bin
目录),然后只需使用:

URL url = ClassLoader.getSystemResource("calculatormedii/resources/CMedii.ico");

您应该打印更多的堆栈跟踪。如果进一步往下看,您会发现代码中的调用行导致java库中出现异常

但在您的例子中,问题来自这样一个事实:您作为参数提供给getSystemResource的路径应该与包含您正在编码的类的实际类文件的文件夹相关

更准确地说,您可以同时使用以下两种方法:

  • 然后路径必须与类路径条目相对
  • getClass.getResourceUrl和路径必须相对于您正在编码的类的类文件
  • getResourceUrl和路径必须相对于类X的类文件
如果将eclipse与maven一起使用,默认的文件夹结构是

 /src/main/java
 /src/main/resources

然后一切都会为您处理:将资源文件复制到java文件编译到的同一文件夹中。

您应该打印更多的堆栈跟踪。如果进一步往下看,您会发现代码中的调用行导致java库中出现异常

但在您的例子中,问题来自这样一个事实:您作为参数提供给getSystemResource的路径应该与包含您正在编码的类的实际类文件的文件夹相关

更准确地说,您可以同时使用以下两种方法:

  • 然后路径必须与类路径条目相对
  • getClass.getResourceUrl和路径必须相对于您正在编码的类的类文件
  • getResourceUrl和路径必须相对于类X的类文件
如果将eclipse与maven一起使用,默认的文件夹结构是

 /src/main/java
 /src/main/resources

然后一切都会为您处理:将资源文件复制到java文件编译到的同一文件夹中。

您确定应用程序中有
src
文件夹/包吗?我指的不是编译源代码的文件夹,而是编译应用程序中的一个文件夹。这个问题已经解决了。问题不在于路径或任何东西。当Jon Skeet给我设置代码时,我使用了它,图标仍然是默认的。问题是我的文件是ICO文件。我转换了一个16X16版本的图标,并将其保存为PNG,然后将其添加到参考资料中,这解决了我的问题。多谢各位,StackOverflow是编程领域的一颗宝石,我不到一分钟就得到了答案!您确定应用程序中有
src
文件夹/包吗?我指的不是编译源代码的文件夹,而是编译应用程序中的一个文件夹。这个问题已经解决了。问题不在于路径或任何东西。当Jon Skeet给我设置代码时,我使用了它,图标仍然是默认的。问题是我的文件是ICO文件。我转换了一个16X16版本的图标,并将其保存为PNG,然后将其添加到参考资料中,这解决了我的问题。多谢各位,StackOverflow是编程领域的一颗宝石,我不到一分钟就得到了答案!好的,我把图标文件移到了那个文件夹,现在它没有显示任何错误,但是图标没有改变。它仍然是java应用程序拥有的咖啡杯。有什么帮助吗?我将图标移动到两个位置:bin文件夹和所有其他类的文件夹。我想他甚至不想要
calculatormdii/
部分。@托马斯:鉴于错误已经消失,这听起来像是树的一部分。@user1115506:也许你正在使用的类不支持
ico
格式?我不能说我对这方面了解得太多。是的,真的,谢谢乔恩·斯基特。我确实怀疑ico文件不受支持,因为我以前尝试在netbeans中将它们设置为“导入映像”,但它不允许这样做。我将尝试将其转换为png,看看会发生什么。好的,我将图标文件移动到该文件夹中,现在它不会显示任何错误,但是图标没有更改。它仍然是java应用程序拥有的咖啡杯。有什么帮助吗?我将图标移动到两个位置:bin文件夹和所有其他类的文件夹。我想他甚至不想要
calculatormdii/
部分。@托马斯:鉴于错误已经消失,这听起来像是树的一部分。@user1115506:也许你正在使用的类不支持
ico
格式?我不能说我对这方面了解得太多。是的,真的,谢谢乔恩·斯基特。我确实怀疑ico文件不受支持,因为我以前尝试在netbeans中将它们设置为“导入映像”,但它不允许这样做。我将尝试将其转换为png,看看会发生什么。当我添加类所在的相对路径时,错误再次出现。我试着每天设置5条路径