0

这是我第一次尝试使用 GUI,我正在尝试设置 JButton 的图标。无论我如何编码,我都会得到一个 NPE。我已经标记了发生 NPE 的行。我已经成功地将 URL 传递给 setIcon 方法,但它从不影响 GUI。我也尝试过使用 Icon 而不是 Image Icon 的代码,没有任何变化。任何建议都会非常有帮助。谢谢。

static Random roll = new Random();

handCard1 = new javax.swing.JButton();       //this has been initialized through a series of methods that initialized the GUI

public static void main(String args[]) 
{

    yourHand.setCard1(rollForCard.getCard());         //randomly set to fire, water or wind


    if (yourHand.getCard1().equals("fire"))

            handCard1.setIcon(SetIcon.setFireIcon()); //NPE here



           //I also tried a simple       handCard1.setIcon(fire);
           //with this before the main   ImageIcon fire = new ImageIcon("fire.jpg");

}//end main

设置图标...

import javax.swing.ImageIcon;

public class SetIcon 
{

public static ImageIcon setFireIcon()
{
    ImageIcon fire = (new ImageIcon("fire.jpg"));

    //I have also tried: ImageIcon fire = (new javax.swing.ImageIcon(getClass().getResource("fire.jpg")));
    //and:           ImageIcon fire = new ImageIcon(getClass().getResource("fire.jpg")));
    return fire;
}

}
4

1 回答 1

0

好吧,您的 handCard1 可能是一个非静态变量,而您的图标设置过程是在静态方法中完成的。通常我们使用 main 方法来实例化对象,这就是你应该做的,创建一个类的新实例并在构造函数中移动 cod,你的 NPE 将消失或将 handCard1 声明为静态。
EDIT1:此外,如果您的 handCard1 已经是静态的,NPE 可能会出现,因为您的 setIcon 方法中的路径错误,如果您没有设置任何类路径,则该图标必须放在您的 java.exe 目录中。解决此问题的最佳方法是将该图像作为资源导入到您的 eclipse/netbeans 项目中,并将其作为资源路径进行访问。

于 2013-08-06T21:26:41.063 回答