我得到了一个NullPointerException,我不知道为什么。如果有人可以查看我的代码并告诉我它出了什么问题,那就太好了。
提示:构建一个按钮金字塔,其输入1) 块宽度2) 块高度3) 行号
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class BlockPyramidBuilder extends JPanel{
public static int height;
public static int width;
public static int rowNum;
public static JFrame frame = new JFrame();
public static Graphics g;
public static BlockPyramidBuilder test;
public static void main(String[]Args){
Scanner inputReader = new Scanner(System.in);
System.out.print("Block Height ------->" );
height = inputReader.nextInt();
System.out.print("Block Width ------->" );
width = inputReader.nextInt();
System.out.print("Row Num ------->" );
rowNum = inputReader.nextInt();
test = new BlockPyramidBuilder(height, width, rowNum);
frame.add(test);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public BlockPyramidBuilder(int height, int width, int rowNum){
ArrayList<MyBox> array = new ArrayList<MyBox>();
int center = frame.getWidth();
int x = 0;
int y = 0;
for(int i = 1; i <= rowNum; i++){
y = height * (i-1);
for(int j = 1; j <= i; j++){
x = center + (width/2) * j;
System.out.println("x: " + x + " y: " + y);
MyBox r = new MyBox(x, y, width, height);
array.add(r);
}
}
for(int i = 0; i < array.size(); i++){
test.add(array.get(i));
}
}
}
class MyBox extends JButton{
public MyBox(int x, int y, int height, int width){
super();
setBackground(new java.awt.Color(37, 80, 130));
setFont(new java.awt.Font("Trebuchet MS", 0, 24));
setForeground(new java.awt.Color(38,38,38));
setSize(height, width);
setLocation(x, y);
}
}
代码获取正确的坐标来绘制框,但是将 MyBox 添加到 JPanel 时出错。另外,我想知道
在构造函数 BlockPyramidBuilder 中,引用在构造函数完成之前未设置的测试对象。
test
在调用构造函数之前未初始化,您尝试在构造函数中使用它。因此,你会得到一个NullPointerException
此外,您不应该将所有这些变量声明static
.你有一个类,它应该有实例变量。