ImageIcon(); // Creates an uninitialized image icon.
ImageIcon(byte[]); // Creates an ImageIcon from an array of bytes which were read from an image file containing a supported image format, such as GIF, JPEG, or (as of 1.3) PNG.
ImageIcon(Image); // Creates an ImageIcon from an image object.
ImageIcon(String); // Creates an ImageIcon from the specified file. The String can be a file name or a file path.
ImageIcon(URL); // Creates an ImageIcon from the specified URL.
1条答案
按热度按时间xqnpmsa81#
空指针异常并不难修复。大多数情况下,异常消息会告诉您问题所在。但此问题并非如此。不过,异常消息足以让您了解问题所在。
长话短说,抛出
NullPointerException
是因为您不知道如何在正确的上下文中使用getClass().getClassLoader().getResource()
。对于您要尝试做的事情,您 * 可能 * 甚至不需要使用它。您可以简单地将一个更简单、有效的参数传递给ImageIcon
构造函数。让我们检查一下
ImageIcon
构造函数,看看您可以使用哪一个。根据您在帖子中使用的参数,似乎您应该将文件名或文件路径直接传递到
ImageIcon
构造函数中,最坏的情况下,您可以传递图像的完整路径。如果您的映像在项目中,获取完整路径的一种方法是使用
System.getProperty("user.dir")
。此属性返回启动Java应用程序的路径。这基本上是您的项目。这是一种很好的方法,因为此路径很可能会更改。例如,在开发期间,此路径可能会在团队中的开发人员之间更改。然后,当部署代码时,它很可能在一个不同的路径中。重要的是,在每种情况下,这个路径都将由系统自动为您解析。您也可以从项目的根目录传递一个相对路径,并且应该同样工作。然后,您需要做的就是将项目根目录的相对路径附加到映像中。这样做,您的问题就解决了。
因此,假设您有一个“images”文件夹作为项目根目录的子文件夹,您需要替换以下行:
就像这样:
或者是这样的:
使用您的代码和我自己的图像,我能够成功地启动您的应用程序
更新:
在我的兴奋中,我忘记了回答这个问题的根本问题:如何使用
getClass().getClassLoader().getResource()
解决 location is“null” 问题?这很简单...当调用getResource()
时,预期的行为是“resources”必须包含在项目的src
路径中。任何不在类路径中的内容都不会被找到;因此有了NPE。由于您传递的是“trippie200x2001.png”,因此该图像应该位于项目的
src
文件夹中。对于我的示例,由于我使用的是“images/trippie200x2001.png”,因此预期的行为是“images”是src
中的一个包,并且所讨论的图像位于该包(文件夹)中。