我正在尝试创建一个布局为null的GUI,以便可以轻松创建和删除具有像素尺寸的图像,但是当我尝试这样做时会收到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()。
答案 0 :(得分:3)
该错误不在您指示的行中;但在:
frame.pack()
字段frame
是null
,这就是为您提供NPE的原因。我认为您的意思是调用:
this.pack()
因为您的DriverClass
已经扩展了JFrame
。在这种情况下,您实际上不需要public JFrame frame
字段。