fvg*_*vgs 6 java bufferedimage jar image
我正在尝试将图像作为BufferedImage加载到我的java应用程序中,目的是让它在JAR文件中工作.我尝试使用ImageIO.read(new File("images/grass.png"));哪个在IDE中工作,但在JAR中没有.
我也试过了
(BufferedImage) new ImageIcon(getClass().getResource(
"/images/grass.png")).getImage();
Run Code Online (Sandbox Code Playgroud)
由于NullPointerException,它甚至不能在IDE中工作.我尝试使用../images,/ images和路径中的图像.这些都不起作用.
我在这里错过了什么吗?
JB *_*zet 17
new File("images/grass.png")在当前目录中查找文件系统上的目录映像,该目录是启动应用程序的目录.这是错的.
ImageIO.read()返回一个BufferedImage,并获取一个URL或一个InputStream参数.要从InputStream类路径获取URL ,请使用Class.getResource()或Class.getResourceAsStream().路径以/开头,并从类路径的根开始.
因此,如果grass.png文件images位于类路径中的包下,则以下代码应该有效:
BufferedImage image = ImageIO.read(MyClass.class.getResourceAsStream("/images/grass.png"));
Run Code Online (Sandbox Code Playgroud)
这将在IDE中工作,该文件位于运行时类路径中.如果IDE将其"编译"到其目标类目录,那将是它.为此,该文件必须与源代码目录一起位于Java源文件下.