ошибка java.lang.NullPointerException, не стартует программа [закрыт]

122
19 февраля 2021, 17:20
Закрыт. Этот вопрос не по теме. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.

Закрыт 1 год назад.

Улучшить вопрос

в строке Calculator() ошибка, которая не даёт запустить программу. Кроме этого всё верно, вроде как. В чём проблема?

import javax.swing.*;
import java.awt.*;
    public class Class {
        public static void main(String[] args) {
        JPanel windowContent;
        JTextField displayField;
        JButton button0 = null;
        JButton button1 = null;
        JButton button2 = null;
        JButton button3 = null;
        JButton button4 = null;
        JButton button5 = null;
        JButton button6 = null;
        JButton button7 = null;
        JButton button8 = null;
        JButton button9 = null;
        JButton buttonPoint;
        JButton buttonEqual;
        JPanel pl;
            Calculator() {
                windowContent = new JPanel();
                BorderLayout bl = new BorderLayout();
                windowContent.setLayout(bl);
                displayField = new JTextField(30);
                windowContent.add("North", displayField);
                button0 = new JButton("0");
                button0 = new JButton("1");
                button0 = new JButton("2");
                button0 = new JButton("3");
                button0 = new JButton("4");
                button0 = new JButton("5");
                button0 = new JButton("6");
                button0 = new JButton("7");
                button0 = new JButton("8");
                button0 = new JButton("9");
                buttonPoint = new JButton(".");
                buttonEqual = new JButton("=");
                    pl = new JPanel();
                    GridLayout gl = new GridLayout(4, 3);
                    pl.setLayout(gl);
                        pl.add(button1);
                        pl.add(button2);
                        pl.add(button3);
                        pl.add(button4);
                        pl.add(button5);
                        pl.add(button6);
                        pl.add(button7);
                        pl.add(button8);
                        pl.add(button9);
                        pl.add(button0);
                        pl.add(buttonPoint);
                        pl.add(buttonEqual);
                            windowContent.add("Center",pl);
                            JFrame frame = new JFrame("Calculator");
                            frame.setContentPane(windowContent);
                            frame.pack();
                            frame.setVisible(true);
            }
    }
    }```
Answer 1

Прежде всего, следует обратить внимание на то, что панель, кнопки и текстовое поле инициализированы в main(), в то время, как они могут быть или в полях или в конструкторе, чтобы программа работала в этом случае. Calculator(), судя по всему, является конструктором, в таком случае имя класса должно называться Calculator, либо Calculator(), т.е. конструктор надо переименовать в Class(). Сам конструктор находится внутри мейна, поэтому программа работать не будет вовсе. Для этого его нужно вынести из этого метода. В самом конструкторе 10 раз переинициализируется кнопка "0", остальные кнопки null, поэтому и вылетает NullPointerException. В методе мейн также надо создать экземпляр того же класса.

import javax.swing.*;
import java.awt.*;
public class Calculator {
    JPanel windowContent;
    JTextField displayField;
    JButton button0 = null;
    JButton button1 = null;
    JButton button2 = null;
    JButton button3 = null;
    JButton button4 = null;
    JButton button5 = null;
    JButton button6 = null;
    JButton button7 = null;
    JButton button8 = null;
    JButton button9 = null;
    JButton buttonPoint;
    JButton buttonEqual;
    JPanel pl;
    public static void main(String[] args) {
        Calculator m = new Calculator();
    }
    Calculator() {
        windowContent = new JPanel();
        BorderLayout bl = new BorderLayout();
        windowContent.setLayout(bl);
        displayField = new JTextField(30);
        windowContent.add("North", displayField);
        button0 = new JButton("0");
        button1 = new JButton("1");
        button2 = new JButton("2");
        button3 = new JButton("3");
        button4 = new JButton("4");
        button5 = new JButton("5");
        button6 = new JButton("6");
        button7 = new JButton("7");
        button8 = new JButton("8");
        button9 = new JButton("9");
        buttonPoint = new JButton(".");
        buttonEqual = new JButton("=");
        pl = new JPanel();
        GridLayout gl = new GridLayout(4, 3);
        pl.setLayout(gl);
        pl.add(button1);
        pl.add(button2);
        pl.add(button3);
        pl.add(button4);
        pl.add(button5);
        pl.add(button6);
        pl.add(button7);
        pl.add(button8);
        pl.add(button9);
        pl.add(button0);
        pl.add(buttonPoint);
        pl.add(buttonEqual);
        windowContent.add("Center",pl);
        JFrame frame = new JFrame("Calculator");
        frame.setContentPane(windowContent);
        frame.pack();
        frame.setVisible(true);
    }
}
READ ALSO
LoadingView из нескольких методов

LoadingView из нескольких методов

Использую Moxy для реализации MVP

137
Оценить сложность функции

Оценить сложность функции

Есть функция которая перебирает в цикле входящий массив строк

123
Удалить символы в начале и конце строки

Удалить символы в начале и конце строки

Мне нужно с помощью регулярки образать все нули спереди, и один ноль в концеНаписал вот такую регулярку, но она работает не правильно str

117