gpt4 book ai didi

java - getClass().getResource() 异常?

转载 作者:行者123 更新时间:2023-11-30 07:19:35 25 4
gpt4 key购买 nike

我正在尝试学习如何将图像添加到我的 JFrame。我精通 GUI,但我就是不明白为什么这行不通。

我设置了数组,这样我就可以做多张图片,以防你想知道。

(1) 我的问题是 getClass().getResource("0.png");由于某种原因,这一直失败。当 main(S...) 创建对象 GUIv1 时,它在 image[0].....0.png"); 中失败了;

不知道为什么,我正在使用 eclipse,图像就在我的类(class)所在的默认包中。有什么需要吗?

(2) 这里似乎也有问题,但这不是第一个异常的原因,我也很感激这个问题的答案。

(我第一次来这里,如果代码字体不对,我深表歉意)。

import java.awt.*;
import javax.swing.*;

public class GUIv1 extends JFrame{

private static int tilesnum = 2;
private static ImageIcon[] image = new ImageIcon[tilesnum + 2];
private static JLabel[] imagepanel = new JLabel[tilesnum + 2];

public GUIv1() {
setLayout(new FlowLayout());

image[0] = new ImageIcon(getClass().getResource("0.png")); //HERE (1)
image[1] = new ImageIcon(getClass().getResource("1.png"));
image[2] = new ImageIcon(getClass().getResource("2.png"));
image[3] = new ImageIcon(getClass().getResource("3.png"));

for(int i = 0; i < tilesnum + 2; i++) {
imagepanel[i] = new JLabel(image[i]);
add(image[i]); //HERE (2)
}

}

public static void main(String[] args) {

GUIv1 selectorframe = new GUIv1();
selectorframe.setTitle("MapEditor v2");
//JFrame mainframe = new JFrame("MapEditor v2");
selectorframe.pack();
selectorframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
selectorframe.setVisible(true);
}
}

最佳答案

当使用 getClass().getResource() 时,您的图像必须位于与您的类文件 GUIv1.class 相同的位置,否则 NPE 将在 null 值传递到 ImageIcon 的构造函数时产生。

如果您不确定类根在哪里(在这种情况下,图像应该位于何处),您可以显示以下结果:

System.out.println(getClass().getProtectionDomain().getCodeSource().getLocation());

在你的构造函数中。

其次,您不能将 ImageIcon 直接添加到您的 JFrame 容器,因为它不是组件。您可以添加您的Jlabel,这一个组件:

add(imagepanel[i]);

关于java - getClass().getResource() 异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com