如何使用eclipse将图像添加到java项目中?

时间:2011-04-14 01:07:34

标签: java eclipse image resources

我已经围绕SO和Google链接做了很多阅读。

我还没弄明白如何正确地将图像添加到eclipse gui项目中,这样系统就能识别它。我知道有一些关于CLASSPATH的mumbojumbo但它可能不应该这么难做。

首先让我描述一下我正在做的事情......(如果有人能够纠正我,我们将不胜感激。)

这是我的方法。

我使用“导入向导”(右键单击,“导入”,“常规”,“文件”)将图像添加到“导入目录”中,我称之为“/ resources”

Eclipse在eclipse包资源管理器的树视图中自动创建一个名为“resources”的文件夹。在“参考图书馆”的条目下。

注意,“资源”不在“引用的库”下,它在树中处于同一级别。

然后我使用以下代码:

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
InputStream input = classLoader.getResourceAsStream("/resources/image.jpg");
Image logo = ImageIO.read(input);

此时,我运行测试程序并收到此错误:

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(Unknown Source)
    at Test.main(Test.java:17)

提前感谢您的帮助!

5 个答案:

答案 0 :(得分:36)

将图像放在源文件夹中,而不是普通文件夹中。即:右键单击项目 - >新 - >源文件夹。将图像放在该源文件夹中。然后:

InputStream input = classLoader.getResourceAsStream("image.jpg");

请注意,路径被省略。那是因为图像直接位于路径的根部。您可以在源文件夹下添加文件夹,以便根据需要进一步细分。或者您可以将图像放在现有的源文件夹下(通常称为src)。

答案 1 :(得分:0)

您可以重新保存图像并从字面上找到项目的src文件,并在保存时将其添加到该文件中。对我来说,我必须去netbeans并找到我的项目,当它出现时它有3个文件src是最后一个。不要点击任何一个只是保存你的照片。这应该工作。现在调整它可能是一个不同的问题,我现在正在研究lol

答案 2 :(得分:0)

如果您仍然遇到Eclipse查找文件的问题,您可以尝试以下方法:

  1. 通过使用java.io.File类获取规范路径格式并验证(a)文件是否存在以及(b)规范路径是什么,根据当前执行环境验证文件是否存在。
  2. 通过在main中打印以下内容来验证默认工作目录:

        System.out.println("Working dir:  " + System.getProperty("user.dir"));
    
  3. 对于上面的(1),我将以下调试代码放在我试图访问的特定文件中:

                File imageFile = new File(source);
                System.out.println("Canonical path of target image: " + imageFile.getCanonicalPath());
                if (!imageFile.exists()) {
                    System.out.println("file " + imageFile + " does not exist");
                }
                image = ImageIO.read(imageFile);                
    

    无论出于何种原因,我最终忽略了大多数其他帖子,告诉我将图像文件放在“src”或其他变体中,因为我验证了系统正在查看Eclipse项目目录层次结构的根目录(例如,$ HOME / workspace / myProject)。

    将图像放在src /中(自动复制到bin /)并没有在Eclipse Luna上做到这一点。

答案 3 :(得分:0)

将图像添加到项目中并查看图像非常简单。 首先在项目中创建一个文件夹,其中可以包含任何类型的图像。

然后右键单击Project ->>转到构建路径->>配置构建路径->>添加类文件夹->>选择您刚创建的用于存储图像的文件夹)项目名称下。

class Surface extends JPanel {

    private BufferedImage slate;
    private BufferedImage java;
    private BufferedImage pane;
    private TexturePaint slatetp;
    private TexturePaint javatp;
    private TexturePaint panetp;

    public Surface() {

        loadImages();
    }

    private void loadImages() {

        try {

            slate = ImageIO.read(new File("images\\slate.png"));
            java = ImageIO.read(new File("images\\java.png"));
            pane = ImageIO.read(new File("images\\pane.png"));

        } catch (IOException ex) {

            Logger.`enter code here`getLogger(Surface.class.getName()).log(
                    Level.SEVERE, null, ex);
        }
    }

    private void doDrawing(Graphics g) {

        Graphics2D g2d = (Graphics2D) g.create();

        slatetp = new TexturePaint(slate, new Rectangle(0, 0, 90, 60));
        javatp = new TexturePaint(java, new Rectangle(0, 0, 90, 60));
        panetp = new TexturePaint(pane, new Rectangle(0, 0, 90, 60));

        g2d.setPaint(slatetp);
        g2d.fillRect(10, 15, 90, 60);

        g2d.setPaint(javatp);
        g2d.fillRect(130, 15, 90, 60);

        g2d.setPaint(panetp);
        g2d.fillRect(250, 15, 90, 60);

        g2d.dispose();
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        doDrawing(g);
    }
}

public class TexturesEx extends JFrame {

    public TexturesEx() {

        initUI();
    }

    private void initUI() {

        add(new Surface());

        setTitle("Textures");
        setSize(360, 120);
        setLocationRelativeTo(null);        
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                TexturesEx ex = new TexturesEx();
                ex.setVisible(true);
            }
        });
    }
}

答案 4 :(得分:0)

如果你是在eclipse中这样做的话,有一些快速的说明,如果你将鼠标悬停在脚本中的一个类上,它将显示一个焦点对话框,其中显示f2为焦点。

对于计算机应用,请使用ImageIcon。而对于路径说,

ImageIcon thisImage = new ImageIcon("images/youpic.png");

指定文件夹(图像),然后用/分隔并添加pic文件的名称。

我希望这会有所帮助。如果其他人发布了它,我没有通读。所以...是的...思想强化。