java.lang.NullPointerException

263
28 февраля 2017, 15:56

не могу понять, в чем проблема... выдает ошибку на "field.add(panel1)"

private JPanel contentPane;
public Parameters Parameters;
public  JPanel panel1;
public  JPanel panel2;
public  JPanel field;
public Color rightcolor1; 
public Color wrongcolor1;
public int a;
public int b;

/**
 * Launch the application
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                P frame = new P();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}
/**
 * Create the frame.
 * @return 
 */
public void param(){
    boolean[] wrongcolor = new boolean[2];
    wrongcolor[0] = Parameters.isG1();
    wrongcolor[1] = Parameters.isR1();
    if (wrongcolor[0] = true){
        wrongcolor1 = Color.GREEN;
    } else wrongcolor1 = Color.RED;
    boolean[] rightcolor = new boolean[2];
    rightcolor[0] = Parameters.isG2();
    rightcolor[1] = Parameters.isR2();
    if (rightcolor[0] = true){
        rightcolor1 = Color.GREEN;
    } else rightcolor1 = Color.RED;
    boolean[] size = new boolean[3];
    size[0] = Parameters.isS1();
    size[1] = Parameters.isS2();
    size[2] = Parameters.isS3();
    if (size[0] = true) {
        a = 1;
    } else if (size[1] = true) {
        a = 2;
    } else a = 3;
    boolean[] speed = new boolean[3];
    speed[0] = Parameters.isSp1();
    speed[1] = Parameters.isSp2();
    speed[2] = Parameters.isSp3();
    if (speed[0] = true) {
        b = 1;
    } else if (speed[1] = true) {
        b = 2;
    } else b = 3;
}
public int randomRange(int min, int max){
    double rnd = Math.random();
    return min + (int)(rnd * ((max - min) + 1));
}
public int randomRange (int max){
    return randomRange(0, max);
}

public void addingpanel1() {
    int max = 100;
    for (int i = 0; i < max; i++) {
        panel1 = new JPanel();
        panel1.setBackground(rightcolor1);
        /*Dimension kek = panel1.getPreferredSize();
        int h = size.height;
        int w = size.width;
        int h = size.height;
        int w = size.width; */
        /*panel1.setSize(a, a);*/
        int x = randomRange(getWidth() - a);
        int y = randomRange(getHeight() - a);
        panel1.setBounds(x, y, a, a);
        field.add(panel1);
        field.setComponentZOrder(panel1, 0);
        panel1.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg) {
                if(arg.getButton() != MouseEvent.BUTTON3) return;
                field.remove(panel1);
                field.updateUI();
            }
    });
    }
}
public void addingpanel2() {
    int max = 100;
    for (int i = 0; i < max; i++) {
        JPanel panel2 = new JPanel();
        panel2.setBackground(wrongcolor1);
        int x = randomRange(getWidth() - a);
        int y = randomRange(getHeight() - a);
        panel2.setBounds(x, y, a, a);
        field.add(panel2);
        field.setComponentZOrder(panel2, 0);
        panel2.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent arg) {
                if(arg.getButton() != MouseEvent.BUTTON3) return;
                String s = "Ты проиграл!";
                JLabel lose = new JLabel(s);
                lose.setForeground(Color.RED);
                lose.setFont(new Font("Tahoma", Font.PLAIN, 25));
                lose.setHorizontalAlignment(SwingConstants.CENTER);
                lose.setBounds(0, 66, 434, 114);
                field.add(lose);
            }
    });
    }
}
public P() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 450, 300);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);
    JPanel field = new JPanel();
    field.setBounds(0, 26, 434, 205);
    contentPane.add(field);
    try {
        Parameters = new Parameters(this);
        Parameters.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    } catch (Exception e) {
        e.printStackTrace();
    }
    JButton newgame = new JButton("\u041D\u043E\u0432\u0430\u044F \u0438\u0433\u0440\u0430");
    newgame.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
            Parameters.setVisible(true);
        }
    });
    newgame.setBounds(0, 0, 101, 23);
    contentPane.add(newgame);
    JButton statistika = new JButton("\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0430");
    statistika.setBounds(333, 0, 101, 23);
    contentPane.add(statistika);
    JButton info = new JButton("\u041E \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u0435");
    info.setBounds(333, 238, 101, 23);
    contentPane.add(info);
    JButton exit = new JButton("\u0412\u044B\u0445\u043E\u0434");
    exit.setBounds(234, 238, 89, 23);
    contentPane.add(exit);
    JLabel proshlo = new JLabel("\u041F\u0440\u043E\u0448\u043B\u043E \u0432\u0440\u0435\u043C\u0435\u043D\u0438:");
    proshlo.setBounds(10, 238, 107, 23);
    contentPane.add(proshlo);
    JLabel timer = new JLabel("");
    timer.setBounds(119, 238, 105, 23);
    contentPane.add(timer);
    param();
    addingpanel1();
    addingpanel2();
}

}

Answer 1

У вас не проинициализировано поле field. Если вы думаете что внутри конструктора P() оно у вас инициализируется, то это не так:

 JPanel field = new JPanel();
 field.setBounds(0, 26, 434, 205);
 contentPane.add(field);

Это другая переменная field, которая существует только в конструкторе, в остальной части вашего класса используется field, которая является полем класса.

Может быть вы хотели написать

this.field = new JPanel();
field.setBounds(0, 26, 434, 205);
contentPane.add(field);

?

В этом случае все должно работать, но что конкретно вы хотели сделать известно только вам.

READ ALSO
Не правильно работает matcher java

Не правильно работает matcher java

Есть HTML-шаблон письма и регулярное выражение, которое работает на regex101com

318
Обращение к сервлёту из приложения

Обращение к сервлёту из приложения

Как можно обратится к сервлёту из андроид приложения и вызвать методы doGet(), doPost()?

271
Авторизация ВКонтакте Java

Авторизация ВКонтакте Java

Нужен полноценный класс,который проводит авторизацию пользователя ВКонтакте и даёт токен для дальнейшего его использования

356
Помогите написать java doc для класса

Помогите написать java doc для класса

Есть написанный класс дженерик адаптер

239