最终,您会将应用打包到 jar 文件中。就像您的类文件是应用程序的基本组成部分一样,如果没有它们,安装就会中断,您的图标也是如此。
因此,显而易见的答案是:将图像存储在您存储类文件的相同位置,并使用相同的机制来加载它们。即使它们是一个 jar (意思是,它们根本不是一个文件,而且你根本不能使用那个构造函数 - 根本,那只是用于文件,目的是在这里甚至没有文件,目的是在一个罐子里有一个条目)。
幸运的是,这很容易,但一两件事取决于您如何构建/开发应用程序。无论您使用什么构建,您的代码都应该是这样的:
labelPic.setIcon(TheClassThisCodeIsIn.class.getResource("/images/loadingPic.gif"))
唯一的问题是:您需要对构建过程做些什么才能使其正常工作。从那条路径的风格来看,我很确定答案是:没什么,这会很好地工作,无论是直接在 eclipse 中运行它还是当你告诉 eclipse 将它打包到一个 jar 中时。
那行的作用
Foo.class 是有效的 java,但有点异国情调。这意味着:给我一个命名类的java.lang.Class<?> 引用。您需要自己的类的引用,因为我们将要求从加载资源的任何位置加载资源。我们将把这些图像放在这段代码的类文件所在的同一位置,这就是为什么我们要求您自己的类实例获取这些数据。
getResource 返回一个 URL。 ImageIcon 知道如何处理它,您不必知道。
/images/loadingPic.gif 然后指定资源名称。 这不是文件名。因此,正斜杠(正如我所说,如果你最终在 Windows 上运行它并不重要,而不是文件路径,Java 资源名称)。因为我们以斜杠开头,所以加载器将查看 YourClass.class 所在位置的“根”。例如,如果 YourClass.class 在 jar 文件中,它将在 jar 的“根”中查找名为“images”的文件夹,并从那里查找名为“loadingPic.gif”的条目。