如何在没有绝对路径的java项目中使用图像

时间:2015-02-09 15:36:26

标签: java image netbeans jar

我一直在一个小项目中工作,以获得一些练习编程。它基本上完成了,但是在我能够正确使用图像之前我不会感到满意,我们会感激一点帮助。

所以,目前我正在使用ImageIcon类中的getImage方法,如下所示:

Image body = new ImageIcon("C:/Users/Centollo/Documents/NetBeansProjects/Chess/build/classes/chess/img/WhiteBishop.png").getImage();

我一直试图弄清楚如何在不使用绝对路径的情况下做同样的事情,但我不知道如何将图像作为jar的一部分,以便它可以在任何其他机器。

我需要知道的是放置图像的位置以及访问它们的代码如何。 请尝试解释它,就像我愚蠢的那样。我已经阅读了类似问题的答案,但我不能对它们做出正面或反面。

我在NetBeans中使用"国际象棋"包含所有.java和" chess.img"打包所有.png。

3 个答案:

答案 0 :(得分:1)

如果您的课程从JFrame扩展,您可以这样做:

Image image = new ImageIcon(this.getClass().getResource("/images/MyImage.jpg")).getImage();

如果你的课程扩展了Applet,你可以这样:

private URL base = null;
private Image myImage = null;

try
{
    base = getDocumentBase();
} catch (Exception e)
{
    e.printStackTrace();
}

myImage = getImage(base, "images/MyImage.jpg");

答案 1 :(得分:0)

一个非常快速的谷歌搜索产生了这个:

URL resource = getClass().getClassLoader().getResource( "img/WhiteBishop.png" );
Image body = new ImageIcon( resource );

答案 2 :(得分:0)

有几种方法可以做到这一点,但这就是我建议的方式:

确保chess.img文件夹位于应用程序的类路径中。然后尝试引用类似chess.img/image的路径(是的,你可以在windows中使用正斜杠。)

如果不能使用:

ChessClass.class.getClassLoader().loadResourceAsStream("/chess.img/image");

请注意文件引用开头的正斜杠。这指向类路径的根。它有点令人困惑,因为有unix / linux经验的人可能认为它指的是文件系统的根。由于我10年前所知的原因,这往往比其他答案更好。这是一个丑陋的Java,从未完全清理过。