NullPointerException при установке макета панели на ноль? - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь создать графический интерфейс с нулевым макетом, чтобы я мог легко создавать и стирать изображения с размерами в пикселях, однако при попытке получить это исключение NullPointerException.

Согласно https://docs.oracle.com/javase/tutorial/uiswing/layout/none.html, Достаточно просто установить макет в null, однако, когда я делаю это, я получаю исключение NullPointerException.

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.Component;
import java.awt.Color;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.image.*;
import java.util.*;

public class DriverClass extends JFrame {
  /*
   * The frame to contain all GUI.
   */
  public JFrame frame;
  /*
   * The Panel to contain all GUI.
   */
  public JPanel panel;
  /*
   * Class constructor
   */
  public DriverClass () {
   setSize(400,400);
   JPanel panel = new JPanel();
   panel.setSize(400,400);
   panel.setLayout(null); //NullPointerException occurs here
   add(panel);
   setVisible(true);
   panel.setVisible(true);
   frame.pack();
  }
  /*
   * The main method that runs the example class
   */
  public static void main (String[] args) {

    DriverClass driver = new DriverClass();

  }
}

Я ожидаю, что это простой рабочий JFrame для добавления изображений в (через другой класс)) однако мне вместо этого мешают сделать первый шагОшибка выглядит следующим образом:

    at TextDriverClass.<init>(TextDriverClass.java:40)
    at TextDriverClass.main(TextDriverClass.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:267)

Строка, на которую указывает первая строка ошибки, указана в комментариях к коду.Обратите внимание, что я не создал никаких компонентов или дочерних элементов, кроме JPanel, поэтому мне не нужно беспокоиться об использовании setbounds () или repaint ().

1 Ответ

3 голосов
/ 23 мая 2019

Ошибка не в той строке, которую вы указываете;но в:

frame.pack()

Поле frame равно null, и это то, что дает вам NPE.Я думаю, что вы собираетесь вызвать:

this.pack()

, поскольку ваш DriverClass уже расширяется JFrame.В таком случае вам действительно не нужно поле public JFrame frame.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...