在JButton上设置图标会导致NPE

时间:2013-08-06 21:12:52

标签: java nullpointerexception icons jbutton imageicon

这是我第一次尝试使用GUI,我正在尝试设置JButton的Icon。无论我如何编码,我都会获得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

...操作SetIcon

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;
}

}

1 个答案:

答案 0 :(得分:0)

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