如何在没有绝对路径的 java 项目中使用图像
How to use an image in a java project without an absolute path
我一直在做一个小项目来练习编程。基本上已经完成了,但是我不满意,直到我能正确使用图像,不胜感激。
所以,目前我正在使用 ImageIcon class 中的 getImage 方法,如下所示:
Image body = new ImageIcon("C:/Users/Centollo/Documents/NetBeansProjects/Chess/build/classes/chess/img/WhiteBishop.png").getImage();
我一直在尝试找出如何在不使用绝对路径的情况下做同样的事情,但我不知道如何使图像成为 jar 的一部分,以便它在任何其他机器上都能正常工作.
我只需要知道将图像放在哪里以及访问它们的代码是什么样的。
请试着解释一下,就像我很愚蠢一样。我已经阅读了类似问题的答案,但我无法理解它们。
我在 NetBeans 中使用一个包含所有 .java 的 "chess" 包和一个包含所有 .png 的 "chess.img" 包。
非常快速的 google 搜索结果如下:
URL resource = getClass().getClassLoader().getResource( "img/WhiteBishop.png" );
Image body = new ImageIcon( resource );
有几种方法可以做到这一点,但我建议采用以下方法:
确保 chess.img
文件夹在您的应用程序的类路径中。然后尝试引用 chess.img/image
之类的路径(是的,您可以在 windows 中使用正斜杠)
如果这不起作用,请使用:
ChessClass.class.getClassLoader().loadResourceAsStream("/chess.img/image");
注意文件引用开头的正斜杠。这指向类路径的根。这有点令人困惑,因为有 unix/linux 经验的人可能会认为它指的是文件系统的根目录。由于我 10 年前就知道的原因,这往往比给出的其他答案更有效。这是 Java 的丑陋一点,从未完全清理过。
如果您的 class 从 JFrame 扩展,您可以这样做:
Image image = new ImageIcon(this.getClass().getResource("/images/MyImage.jpg")).getImage();
如果你的class扩展了Applet,你可以这样做:
private URL base = null;
private Image myImage = null;
try
{
base = getDocumentBase();
} catch (Exception e)
{
e.printStackTrace();
}
myImage = getImage(base, "images/MyImage.jpg");
我一直在做一个小项目来练习编程。基本上已经完成了,但是我不满意,直到我能正确使用图像,不胜感激。
所以,目前我正在使用 ImageIcon class 中的 getImage 方法,如下所示:
Image body = new ImageIcon("C:/Users/Centollo/Documents/NetBeansProjects/Chess/build/classes/chess/img/WhiteBishop.png").getImage();
我一直在尝试找出如何在不使用绝对路径的情况下做同样的事情,但我不知道如何使图像成为 jar 的一部分,以便它在任何其他机器上都能正常工作.
我只需要知道将图像放在哪里以及访问它们的代码是什么样的。 请试着解释一下,就像我很愚蠢一样。我已经阅读了类似问题的答案,但我无法理解它们。
我在 NetBeans 中使用一个包含所有 .java 的 "chess" 包和一个包含所有 .png 的 "chess.img" 包。
非常快速的 google 搜索结果如下:
URL resource = getClass().getClassLoader().getResource( "img/WhiteBishop.png" );
Image body = new ImageIcon( resource );
有几种方法可以做到这一点,但我建议采用以下方法:
确保 chess.img
文件夹在您的应用程序的类路径中。然后尝试引用 chess.img/image
之类的路径(是的,您可以在 windows 中使用正斜杠)
如果这不起作用,请使用:
ChessClass.class.getClassLoader().loadResourceAsStream("/chess.img/image");
注意文件引用开头的正斜杠。这指向类路径的根。这有点令人困惑,因为有 unix/linux 经验的人可能会认为它指的是文件系统的根目录。由于我 10 年前就知道的原因,这往往比给出的其他答案更有效。这是 Java 的丑陋一点,从未完全清理过。
如果您的 class 从 JFrame 扩展,您可以这样做:
Image image = new ImageIcon(this.getClass().getResource("/images/MyImage.jpg")).getImage();
如果你的class扩展了Applet,你可以这样做:
private URL base = null;
private Image myImage = null;
try
{
base = getDocumentBase();
} catch (Exception e)
{
e.printStackTrace();
}
myImage = getImage(base, "images/MyImage.jpg");