Java:图像没有从资源文件夹中加载

发布于 2025-01-24 03:57:29 字数 1725 浏览 2 评论 0原文

我目前正在从事一个学校项目。 但是,我正在与Jframe和Jpanel合作。 我需要从项目中的资源文件夹中添加图像作为徽标,因此不允许将其移动到其他地方。

三个项目的树看起来像这样:

Eclipse向我展示了这条路:

file:///users/myname/git/m0/myname/src/resources/siegel.jpg

当我尝试使用siegel.jpg加载它时,它会失败。 使用资源/siegel.jpgsrc/resources/siegel.jpg也是如此。

我想念什么?下面是我的代码。

package gui;

import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ImageFrame extends JPanel {

    public ImageFrame() {
        this.setLayout(new BorderLayout());

        try {
            BufferedImage logo = ImageIO.read(this.getClass().getResource("src/resources/siegel.jpg"));
            JLabel image = new JLabel(new ImageIcon(logo));
            this.add(image);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Fuck you");
//          e.printStackTrace();
        }

    }
}

确切的错误msg:

    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1402)
    at gui.ImageFrame.<init>(ImageFrame.java:20)
    at gui.LeftPanel.<init>(LeftPanel.java:28)
    at gui.MyFrame.<init>(MyFrame.java:31)
    at gui.GUI_main.main(GUI_main.java:9)

I am currently working on a school project.
However, I am working with JFrame and JPanel.
I need to add an image as a logo from my resources folder inside my project, I am not allowed to move it somewhere else.

The tree of three project looks like this:
tree

Eclipse shows me this path:
eclipse path

file:///Users/myname/git/M0/myname/src/resources/siegel.jpg

When I try to load it with siegel.jpg it fails.
with resources/siegel.jpg and src/resources/siegel.jpg too.

What did I miss? Down below is my code.

package gui;

import java.awt.BorderLayout;
import java.awt.image.BufferedImage;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ImageFrame extends JPanel {

    public ImageFrame() {
        this.setLayout(new BorderLayout());

        try {
            BufferedImage logo = ImageIO.read(this.getClass().getResource("src/resources/siegel.jpg"));
            JLabel image = new JLabel(new ImageIcon(logo));
            this.add(image);

        } catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Fuck you");
//          e.printStackTrace();
        }

    }
}

The exact error msg:

    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1402)
    at gui.ImageFrame.<init>(ImageFrame.java:20)
    at gui.LeftPanel.<init>(LeftPanel.java:28)
    at gui.MyFrame.<init>(MyFrame.java:31)
    at gui.GUI_main.main(GUI_main.java:9)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

埋葬我深情 2025-01-31 03:57:29

当我尝试使用siegel.jpg加载它时,它会失败。和
资源/siegel.jpg和src/resources/siegel.jpg

应该是确切的错误,

 javax.imageio.IIOException: Can't read input file!
          at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1402)
          at gui.ImageFrame.<init>(ImageFrame.java:20)
          at gui.LeftPanel.<init>(LeftPanel.java:28)
          at gui.MyFrame.<init>(MyFrame.java:31)
          at gui.GUI_main.main(GUI_main.java:9)

尝试使用“/siegel.jpg”

BufferedImage logo = ImageIO.read(this.getClass().getResource("/siegel.jpg"));
     

强>

 BufferedImage logo = ImageIO.read(
                        new File("/home/user/Downloads/myapp/src/main/resources/siegel.jpg"));

以下代码至少对我有用,

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ImageFrame extends JPanel {

    public ImageFrame() {
        this.setLayout(new BorderLayout());
        try {

            BufferedImage logo = ImageIO.read(this.getClass().getResource("/siegel.jpg"));
            JLabel image = new JLabel(new ImageIcon(logo));
            this.add(image);

        } catch (Exception e) {
            // handle
            e.printStackTrace();
        }

    }

    // My Test Driver 
    public static void main(String args[]) {

        JFrame frame = new JFrame();
        frame.add(new ImageFrame());
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(2, 2));
        frame.setVisible(true);
    }
}

When I try to load it with siegel.jpg it fails. with
resources/siegel.jpg and src/resources/siegel.jpg too

This should be the exact error,

 javax.imageio.IIOException: Can't read input file!
          at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1402)
          at gui.ImageFrame.<init>(ImageFrame.java:20)
          at gui.LeftPanel.<init>(LeftPanel.java:28)
          at gui.MyFrame.<init>(MyFrame.java:31)
          at gui.GUI_main.main(GUI_main.java:9)

Try with "/siegel.jpg"

BufferedImage logo = ImageIO.read(this.getClass().getResource("/siegel.jpg"));
     

If you want to give a complete path,

 BufferedImage logo = ImageIO.read(
                        new File("/home/user/Downloads/myapp/src/main/resources/siegel.jpg"));

The below code is working at least for me,

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class ImageFrame extends JPanel {

    public ImageFrame() {
        this.setLayout(new BorderLayout());
        try {

            BufferedImage logo = ImageIO.read(this.getClass().getResource("/siegel.jpg"));
            JLabel image = new JLabel(new ImageIcon(logo));
            this.add(image);

        } catch (Exception e) {
            // handle
            e.printStackTrace();
        }

    }

    // My Test Driver 
    public static void main(String args[]) {

        JFrame frame = new JFrame();
        frame.add(new ImageFrame());
        frame.setSize(400, 400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new GridLayout(2, 2));
        frame.setVisible(true);
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文