NulPointerException on ActionListener

101
21 февраля 2022, 03:40

Подскажите пожалуйста. Дан код следующий(из книги). при запуске кода вылетает ошибка NulPointerException on ActionListener. Подскажите,что не так.

Answer 1

В качестве listener передается сам объект gui. Объект gui инициализирован. Значит он не null.

NullPointerException вылетает именно в строке 25 (button). Из этого вывод, что ActionListener(в этом случае за него gui) не находит объект JButton по имени button, чтобы поселить в него текст. Значит button в строке 25 не инициализирован.

button инициализирован в методе go, но текст buttonа меняется в другом методе класса SimpleGui1B - actionPerformed. Беда в том, что из другого метода класса не виден объект, инициализированный в методе go. А виден тот JButton button, который указан параметром класса SimpleGui1B, который нигде не был инициализирован (почему, думаю видно из кода. Если не видно: создался объект gui, но в конструкторе не инициализирован параметр этого объекта).

Поэтому надо создать ActionListener, у которого нет параметра button, т.е. поступить классически - создать безымянный класс внутри метода go, у которого не будет других вариантов, кроме как видеть инициализированный внутри go объект JButton button и заселить в него текст (см. ниже).

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class SimpleGui1B implements ActionListener {
    private JButton button;
    public static void main(String[] args) {
        SimpleGui1B gui = new SimpleGui1B();
        gui.go();
    }
    private void go() {
        JFrame frame = new JFrame();
        JButton button = new JButton("click me");
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                button.setText("I've been clicked");
            }
        });
        frame.getContentPane().add(button);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setVisible(true);
    }
    public void actionPerformed(ActionEvent e) {
        button.setText("I've been clicked");
    }
}
READ ALSO
java.lang.ClassNotFoundException: org.springframework.security.converter.RsaKeyConverters

java.lang.ClassNotFoundException: org.springframework.security.converter.RsaKeyConverters

Итак, я подключаю к проекту Spring SecurityДобавил две библиотеки:

129
Перенаправить на страницу admin

Перенаправить на страницу admin

нужно,чтобы когда заходил admin на страницу перенаправляло на одну страницу, и если кто-то другойНаписал метод adminPage и создал admin

129
Разница в переменных в Java и Python

Разница в переменных в Java и Python

товарищиЯ долгое время программировал на Java, сейчас затронул Python и в голове немного помешалось

118
Как преобразовать элементы ArrayList в строки

Как преобразовать элементы ArrayList в строки

Задача стоит в том, чтобы удалить все дубли из коллекции, затем отсортировав, преобразовать числа в строкиНикак не могу сообразить, что не так!

168