swing对象数组返回空指针异常

时间:2012-09-23 18:53:34

标签: java arrays swing nullpointerexception

这是我的片段。它返回一个空指针异常.jlabel1已经设置并正常工作

JLabel j[]=new JLabel[10];
i=0;    
j[i]=new JLabel();
j[i].setText("1");
this.add(j[i]);

编辑(来自评论)

JLabel j[]=new JLabel[50]; 
try { 
  Rectangle bounds = jLabel1.getBounds(); 
  j[i].setText("1"); 
  this.add(j[i]); 
  j[i].setBounds(jLabel1.getX(),jLabel1.getY()+50 ,jLabel1.getHeight(),jLabel1.getWidth()); } catch(Exception e) { 
  System.out.println(e.toString()); 
} 

2 个答案:

答案 0 :(得分:3)

评论太短了。尝试发布SSCCE

这似乎对我有用:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Test {

    protected void initUI() {
        final JFrame frame = new JFrame();
        frame.setTitle("Test JLabel");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        class TestPanel extends JPanel {
            int i;

            public TestPanel() {
                JLabel j[] = new JLabel[10];
                i = 0;
                j[i] = new JLabel();
                j[i].setText("1");
                this.add(j[i]);
            }
        }
        frame.add(new TestPanel());
        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Test().initUI();
            }
        });
    }

}

答案 1 :(得分:3)

问题是你忘记了

j[i] = new JLabel();

在您在评论中发布的代码段中(尽管它已包含在您的问题中)。

NullPointerException通常很容易调试,因为您只需要按照堆栈跟踪来发现究竟是什么null。如果有疑问,您只需在该行上放置一个断点并使用调试器。

要获取堆栈跟踪,您可以使用e.printStackTrace()或只删除try catch块(因为所有异常都只有try catch块是不好的做法)