从不同包中的类加载包内的Java Image

Cod*_*Guy 14 java bufferedimage image

我有一个名为MyProject的Java项目.我有几个不同的包(为了这个问题的目的,保持名称简单),如下所示:

src/PackageA
src/PackageA/PackageAa
src/PackageA/PackageAa/PackageAaa
src/PackageB
src/PackageB/PackageBa
src/PackageB/PackageBa/PackageBaa
Run Code Online (Sandbox Code Playgroud)

我上课了

src/PackageA/PackageAa/PackageAaa/MyJavaFile.java
Run Code Online (Sandbox Code Playgroud)

我有一个图像

src/PackageB/PackageBa/PackageBaa/MyImage.png
Run Code Online (Sandbox Code Playgroud)

在里面MyJavaFile.java,我想声明一个图像对象MyImage.png

Image img = new Image(....what goes here?...)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

Jon*_*eet 17

你可以调用Class.getResource并指定一个开头的路径/,或者ClassLoader.getResource不用打扰/:

URL resource = MyJavaFile.class
      .getResource("/PackageB/PackageBa/PackageBaa/MyImage.png");
Run Code Online (Sandbox Code Playgroud)

要么:

URL resource = MyJavaFile.class.getClassLoader()
      .getResource("PackageB/PackageBa/PackageBaa/MyImage.png");
Run Code Online (Sandbox Code Playgroud)

基本上Class.getResource允许您指定相对于类的资源,但我不认为它允许您使用".."等进行目录导航.

当然,如果您知道正确包中的类,您可以使用:

URL resource = SomeClassInPackageBaa.class.getResource("MyImage.png");
Run Code Online (Sandbox Code Playgroud)

(我假设你可以传递URL到Image有问题的构造.还有getResourceAsStream两个Class和ClassLoader.)


moh*_*lah 5

您可以使用相对路径,因为相对路径是项目文件夹。

 ImageIcon img = new ImageIcon("src/PackageB/PackageBa/PackageBaa/MyImage.png");
Run Code Online (Sandbox Code Playgroud)