创建ImageIcon时getClass()。getResource(...)做了什么?

时间:2014-06-04 20:25:05

标签: java swing

我想在GUI中创建一个漂亮的按钮。有一个描述how to make all kinds of pretty buttons的教程 问题是,他们使用ImageIcon。 因此,下一步是查看图像图标的工作原理以及它们的作用。另一个教程在同一网站上标题为" How to use icons"。
它为您提供了以下代码:

/** Returns an ImageIcon, or null if the path was invalid. */
protected ImageIcon createImageIcon(String path,
                                           String description) {
    java.net.URL imgURL = getClass().getResource(path);
    if (imgURL != null) {
        return new ImageIcon(imgURL, description);
    } else {
        System.err.println("Couldn't find file: " + path);
        return null;
    }
}

java.net.URL imgURL = getClass().getResource(path)行对我来说非常困惑。为什么他们不直接return new ImageIcon(path, description)

3 个答案:

答案 0 :(得分:2)

getResource()搜索负责加载该类的ClassLoader可用的整个路径,搜索该资源。包括在类路径中搜索JAR文件等内容

http://docs.oracle.com/javase/8/docs/api/java/lang/Class.html#getResource-java.lang.String-

答案 1 :(得分:1)

getClass().getResource(path)

在类路径中找到该图标并返回用于加载它的URL。这与您建议使用的不同。只接受String的构造函数从文件系统加载图标。它是通过getClass().getResource(path)完成的,这样您就可以在分发jar中打包您的图标和应用程序所需的所有资源,并仍然可以找到并加载它。否则,您必须依赖文件系统上的某些路径,并确保它们存在于您期望的位置,以便您可以使用相对路径。

答案 2 :(得分:0)

getClass().getResource(path)加载与类文件所在位置相关的资源。这将在IDE中以及在将类打包到JAR文件

之后起作用