如何在Eclipse中将资源文件夹添加到Java项目?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (906)

我希望有一个地方来存储我的图像文件,以便在我的Java项目中使用(一个非常简单的类,只是将图像加载到面板上)。我到处寻找,无法找到如何做到这一点。我该怎么做呢?

我尝试将新文件夹添加到项目中,向项目添加新的类文件夹,并向项目添加新的源文件夹。不管我做什么,我总是得到一个IOException。文件夹总是说它们在构建路径上,所以我不知道该怎么做。

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class PracticeFrame extends JFrame{

private static BufferedImage image;
Thread thread;

public PracticeFrame() {
    super();
    setPreferredSize(new Dimension(640,480));
    setResizable(false);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pack();
    setVisible(true);
}

public static void main (String[] args) {
    PracticeFrame pframe = new PracticeFrame();
    try {
        image = ImageIO.read(new File("/islands.png"));
    } catch (IOException e) {
        e.printStackTrace();
    }

    JPanel panel = new JPanel() {
        @Override
        protected void  paintComponent(Graphics g) {
            super.paintComponent(g);
            g.drawImage(image,0,0,null);
        }
    };

    panel.setBackground(Color.BLUE);
    panel.repaint();
    pframe.add(panel);


}


}

编辑:对我有用的东西,我不知道为什么,将main/res/文件夹添加为类文件夹,然后将其删除。我把它/main/res/作为类文件夹的构建路径的一部分运行它仍然无法正常工作。当我添加它时,我有一个弹出窗口,告诉我有关排除过滤器的信息。但是,当我从构建路径中的库中删除该文件夹,并将我的文件路径更改为:

image = ImageIO.read(new File("src/main/res/islands.png"));

我至少停止了IOException抛出。我不能正确地将图像添加到面板,因为它没有显示,但至少它找到了文件(我认为)。

提问于
用户回答回答于

添加资源文件夹后试试这个:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("test.png");

try {
    image = ImageIO.read(input);
} catch (IOException e) {
    e.printStackTrace();
}
用户回答回答于

尝试为阅读图像提供完整的途径。

示例image = ImageIO.read(新文件(“D:/work1/Jan14Stackoverflow/src/Strawberry.jpg”));

在给出完整路径后,代码不会产生任何异常。如果您只想在java代码中读取图像文件。请参阅以下内容 - http://docs.oracle.com/javase/tutorial/2d/images/examples/LoadImageApp.java

如果类的对象在最后创建,代码可以正常工作并显示图像

// PracticeFrame pframe = new PracticeFrame();//comment this

new PracticeFrame().add(panel);

扫码关注云+社区

领取腾讯云代金券