无法使用 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 图像