NullPointerException при запуске нескольких событий Action - PullRequest
1 голос
/ 12 июля 2010

Назначение кода : Создать две кнопки (button1 и button2). Когда пользователь нажимает кнопку 1, измените текст кнопки 2. Когда пользователь нажимает кнопку 2, измените текст кнопки 1.

Вот код, который я использую:

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

public class multiAL {
JButton button1;
JButton button2;
JFrame frame;
public static void main(String[] args) {
    multiAL setterAL = new multiAL();
    setterAL.go();
}

public void go() {
    button1 =  new JButton("Click me, I'm One");
    button2 =  new JButton("Click me, I'm Two");
    frame.setSize(500,500);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(BorderLayout.WEST, button1);
    frame.getContentPane().add(BorderLayout.EAST, button2);
    frame.setVisible(true);
    button1.addActionListener(new b1L());
    button2.addActionListener(new b2L());
}

class b1L implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        button2.setText("What??, you clicked 1??");
    }
}

class b2L implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        button1.setText("What??, you clicked 2??");
    }
  }
}

Он отлично компилируется, но при запуске я получаю следующую ошибку: Exception in thread "main" java.lang.NullPointerException at multiAL.go(multiAL.java:17) at multiAL.main(multiAL.java:11)

До сих пор я сталкивался только с ошибками во время компиляции. Итак, есть два вопроса, которые я хочу задать:

1) Что не так с кодом? 2) Как отследить ошибки времени выполнения?

Ответы [ 5 ]

3 голосов
/ 12 июля 2010

Я считаю, что ваш фреймовый объект является нулевым.Это никогда не инициализируется.Вы можете прочитать исключение во время выполнения.Он говорит: multiAL.java:17

Это означает, что в строке 17 вы получите NullpointerException

2 голосов
/ 12 июля 2010

frame не инициализируется, поэтому он разрешается до null, и вы не можете вызывать методы для null объектов. Как вы инициализировали button1 и button2, вы также должны инициализировать frame.

frame = new JFrame();
2 голосов
/ 12 июля 2010

Но где строка кода

frame = new JFrame();

?Так как frame is null, ничего не может случиться, я думаю ...

1 голос
/ 12 июля 2010

Инициализация кадра перед первым использованием:

frame = new JFrame();
0 голосов
/ 12 июля 2010

Рассмотрите возможность переименования вашего класса в соответствии с соглашениями об именах классов Java: CamelCase (http://en.wikipedia.org/wiki/CamelCase)

И проблема, как указывали другие пользователи, заключается в том, что объект frame не инициализируется.

Добавьте следующую строку ДО первого использования объекта frame:

frame = new JFrame();
frame.setSize(500,500);
...