-1

这是我的片段。它返回一个空指针异常。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()); 
} 
4

2 回答 2

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

}
于 2012-09-23T18:57:09.967 回答
3

问题是你忘记了

j[i] = new JLabel();

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

ANullPointerException通常很容易调试,因为您只需遵循堆栈跟踪即可发现null. 如有疑问,您只需在该行上放置一个断点并使用调试器。

要获取堆栈跟踪,您可以使用e.printStackTrace()或简单地删除该try catch块(因为简单地try catch为所有异常设置一个块是不好的做法)

于 2012-09-23T19:27:24.907 回答