0

我没有在 Eclipse 或 NetBeans 等任何开发环境中工作。我在 Windows 终端工作。我的根文件夹是 Project,包含 src、res、bin。

res 包含我想在 src 文件夹中的 java 类中使用的 -png 文件。现在我很困惑,因为在我的项目中手动排序文件和文件夹的结构对我的代码行为没有影响。我仍然需要在代码中声明一个类所在的包。我不能(在代码中)声明 Image1.png 位于包 res 中。然后我的班级如何找到这张图片?

我尝试将图像与想要访问的类放在同一个包中,只是尝试getResource("Image1.png")但没有:NullPointerException。

似乎没有人有这个问题,我无法在任何地方找到答案。

我的项目布局:

Project
  bin
    samplecode
      SampleCodeClass1.class
      SampleCodeClass2.class
  res
    Image1.png
  src
    samplecode
      SampleCodeClass1.java
      SampleCodeClass2.java

现在,当我从项目目录打开终端并输入:

java -cp bin;res samplecode.SampleCodeClass1

我明白了at javax.swing.ImageIcon.<init>(Unknown Source)

在我的代码中引用这一行:

ImageIcon ii = new ImageIcon(this.getClass().getResource("Image1.png"));

4

2 回答 2

2

您必须了解重要的类路径是运行时使用的类路径。不是在编译 Java 源文件时。如果结构是

bin
    com
        foo
            MyClass.class
res
    com
        foo
            Image1.png

那么您将能够使用MyClass.class.getResource("Image1.png")or AnyClassInAnyPackage.class.getResource("/com/foo/Image1.png"),前提是该res文件夹位于运行时类路径中:

java -cp bin;res com.foo.MyClass

如果res文件夹不在类路径中,则无法由 ClassLoader 加载。

编辑:

图像在默认包中。该类在包示例代码中。所以它们不在同一个包中。所以你不能使用this.getClass().getResource("Image1.png"),它会在与类相同的包中查找图像。相反,您必须使用类路径根目录中图像的完整路径,并以 a 开头/this.getClass().getResource("/Image1.png")

于 2013-10-29T19:33:50.993 回答
0

您从哪个 API 引用getResourcejava.util.ResourceBundle? 确保文件引用了您放置它们的路径,相对于类路径。这还要求您java -classpath适当地指定运行时类路径(例如 )。

于 2013-10-29T19:34:00.150 回答