无法使用 java swing 从类路径渲染图像?

Posted

技术标签:

【中文标题】无法使用 java swing 从类路径渲染图像?【英文标题】:Cannot render image from classpath with java swing? 【发布时间】:2021-11-07 09:34:13 【问题描述】:

这是我的代码&如果我运行它会打印出来

Exception in thread "main" java.lang.IllegalArgumentException: input == null!
    at javax.imageio.ImageIO.read(ImageIO.java:1348)
    at com.auroraclient.launcher.AuroraLauncher.init(AuroraLauncher.java:28)
    at Main.main(Main.java:7)

我 100% 确定包和文件在那里,但 java 似乎找错了地方。有人知道这里发生了什么吗?

public enum AuroraLauncher 

    instance;

    public JFrame frame;
    public AuroraPanel panel;

    public void init()
        frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setTitle("Aurora Launcher rel- 91021");
        frame.setBounds(320, 180, 1280, 720);
        frame.setUndecorated(true);
        frame.setResizable(false);
        panel = new AuroraPanel(frame);
        panel.setBounds(0, 0, 1280, 720);
        panel.setVisible(true);
        frame.add(panel);
        try 
            JLabel label = new JLabel(new ImageIcon(ImageIO.read(this.getClass().getResourceAsStream("resources/wat.png"))));
            label.setVisible(true);
            label.setBounds(0, 0, 1280, 720);
            frame.add(label);
         catch (IOException e) 
            e.printStackTrace();
        
        /**
         * Layer top buttons
         */
        frame.setVisible(true);
    


【问题讨论】:

我会考虑使用资源的完整路径(来自类路径的上下文),可能类似于/resources/wat.png。不使用前导 / 意味着它是类本身的相对路径,即 package/to/class/resources 【参考方案1】:

如果您使用的是 Maven(我猜我使用的是 /resources 一词),那么 /resources 文件夹中的所有内容通常都会映射到类路径的根目录。

所以你可以试试这个:

JLabel label = new JLabel(new ImageIcon(ImageIO.read(this.getClass().getResourceAsStream("wat.png"))));
        

【讨论】:

我没有使用 maven,我只有一个文件来存放我所有的资源和资产。谢谢你的帮助 好的@hopes32_,你能分享一下你的资源/资产的结构吗?

以上是关于无法使用 java swing 从类路径渲染图像?的主要内容,如果未能解决你的问题,请参考以下文章

无法从类路径上的 /AwsCredentials.properties 文件加载 AWS 凭证

使用 java.awt 和 java.swing 获取要在框架上显示的 file.png 图像

如何在Java Swing中创建响应式JList

Java Swing:显示 Jar 中的图像

将文件路径拖放到 Java Swing JTextField

如何在 Java 中真正从类路径中读取文本文件