Исключение нулевого указателя в программе - PullRequest
0 голосов
/ 13 августа 2010

Код ниже не может не скомпилироваться, но, тем не менее, во время выполнения он говорит java.lang.NullPointerException в строке в строках с номерами 20 и 41. Также мне немного любопытно узнать, что такое исключение нулевого указателя, что происходит во время выполнения?

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 ]

5 голосов
/ 13 августа 2010

Вы передаете null по следующим методам ....

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

Это потому что следующее не было инициализировано.

 private JToolBar toolbar1;
 private JToolBar toolbar2;

Определение NullPointerException

Брошенный, когда приложение пытается использовать ноль в случае, когда объект требуется. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Взятие длины нуля, как если бы это был массив.
  • Доступ или изменение пустых слотов, как если бы это был массив.
  • Бросить ноль, как если бы это было значение Throwable.

Инициализировать его

 JToolBar toolbar1 = new JToolBar(SwingConstants.HORIZONTAL);
 JToolBar toolbar2 = new JToolBar(SwingConstants.VERTICAL);
2 голосов
/ 13 августа 2010

На самом деле не выделено toolbar1 или toolbar2. Вам нужно сделать что-то вроде:

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

так же, как вы сделали с:

JButton one = new JButton("one");

Причина, по которой вы получаете исключение, заключается в том, что вы пытаетесь разыменовать его, и там ничего нет.

См. здесь для документации JToolBar.

1 голос
/ 13 августа 2010

Вы никогда не должны ловить исключение NullPointerException, вы всегда должны писать свою программу так, чтобы этого не произошло. Примените необходимые нулевые проверки для условий, упомянутых "The Elite Gentlemen":)

1 голос
/ 13 августа 2010

Инициализация панелей инструментов

 private JToolBar toolbar1;
 private JToolBar toolbar2;

Вы пытаетесь добавить кнопки на свои панели инструментов до того, как создали их. Самое простое решение:

 private JToolBar toolbar1 = new JToolBar();
 private JToolBar toolbar2 = new JToolBar();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...