程序中的空指针异常

时间:2010-08-13 16:13:58

标签: java nullpointerexception

下面的代码编译没有失败,但是在运行时它在第20行和第41行的行处显示了java.lang.NullPointerException。另外,我有点好奇知道什么是Null指针异常,在运行时会发生什么?

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


public class Tool 
    {
     private JToolBar toolbar1;
     private JToolBar toolbar2;
     private JPanel panel;
     public Tool()
        {
         JFrame frame= new JFrame();
         panel = new JPanel();
         panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
         JButton one = new JButton("one");
         JButton two = new JButton("two");
         JButton three = new JButton("three");
         JButton four = new JButton("four");
             toolbar1 = new JToolBar();
             toolbar2 = new JToolBar();
         toolbar1.add(one);
         toolbar1.add(two);
         toolbar2.add(three);
         toolbar2.add(four);
         toolbar1.setAlignmentX(0);
         toolbar2.setAlignmentX(0);
         panel.add(toolbar1);
         panel.add(toolbar2);
         frame.add(panel,BorderLayout.NORTH);

         frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
         frame.setSize(400,300);
         frame.setTitle("ZOOP");
         frame.setVisible(true);
        }




        public static void main (String args[])
        {
         Tool zoop = new Tool();
        }


    }

4 个答案:

答案 0 :(得分:5)

您正在通过以下方法传递null ....

     panel.add(toolbar1);
     panel.add(toolbar2);

这是因为以下内容尚未初始化。

 private JToolBar toolbar1;
 private JToolBar toolbar2;

NullPointerException

的定义
  

应用程序尝试时抛出   在对象是的情况下使用null   需要。其中包括:

     
      
  • 调用null对象的实例方法。
  •   
  • 访问或修改空对象的字段。
  •   
  • 将null的长度视为数组。
  •   
  • 访问或修改null的插槽,就像它是一个数组一样。
  •   
  • 抛出null,就好像它是一个Throwable值。
  •   

初始化

 JToolBar toolbar1 = new JToolBar(SwingConstants.HORIZONTAL);
 JToolBar toolbar2 = new JToolBar(SwingConstants.VERTICAL);

答案 1 :(得分:2)

您实际上并未分配 toolbar1toolbar2。您需要执行以下操作:

toolbar1 = new JToolBar ();
toolbar2 = new JToolBar ("other toolbar");

就像你做的那样:

JButton one = new JButton("one");

你获得异常的原因是因为你试图取消引用它并且那里什么都没有。

有关JToolBar文档,请参阅here

答案 2 :(得分:1)

初始化工具栏

 private JToolBar toolbar1;
 private JToolBar toolbar2;

您尝试在创建工具栏之前添加按钮。最简单的解决方案:

 private JToolBar toolbar1 = new JToolBar();
 private JToolBar toolbar2 = new JToolBar();

答案 3 :(得分:1)

你永远不应该捕获NullPointerException,你应该总是编写你的程序,使其不会发生。 对“The Elite Gentlemen”提到的条件进行必要的空检查:)