Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
空指针和私有成员,带swing的基本Java GUI_Java_Swing_Nullpointerexception - Fatal编程技术网

空指针和私有成员,带swing的基本Java GUI

空指针和私有成员,带swing的基本Java GUI,java,swing,nullpointerexception,Java,Swing,Nullpointerexception,当我尝试构建下面的程序时,出现以下错误: Exception in thread "main" java.lang.NullPointerException at java.awt.Container.addImpl(Unknown Source) at java.awt.Container.add(Unknown Source) at miniCADFrame$CanvasPanel.<init>(miniCADFrame.java:71) at

当我尝试构建下面的程序时,出现以下错误:

Exception in thread "main" java.lang.NullPointerException

    at java.awt.Container.addImpl(Unknown Source)
    at java.awt.Container.add(Unknown Source)
    at miniCADFrame$CanvasPanel.<init>(miniCADFrame.java:71)
    at miniCADFrame.<init>(miniCADFrame.java:17)
    at miniCAD.<init>(miniCAD.java:12)
    at miniCAD.main(miniCAD.java:20)
线程“main”java.lang.NullPointerException中的异常 位于java.awt.Container.addImpl(未知源) 位于java.awt.Container.add(未知源) 在miniCADFrame$CanvasPanel。(miniCADFrame.java:71) 在miniCADFrame上。(miniCADFrame.java:17) 在miniCAD。(miniCAD.java:12) 在miniCAD.main(miniCAD.java:20) 很明显,我有一些空指针问题,但我不确定它们在哪里!下面是我认为是问题根源的代码(如果我避免使用下面代码中的类,程序将毫无问题地运行)。我已经为下面的问题点添加了行号

一旦完成,程序将允许用户按下按钮绘制各种形状

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class miniCADFrame extends JPanel {

    private CanvasPanel canvas = new CanvasPanel(); //LINE 17
    private ButtonPanel buttons = new ButtonPanel();

    public miniCADFrame() {
         //Constructor, creates the mother panel
         this.setLayout(new BorderLayout());
         this.add (canvas,BorderLayout.CENTER);
    }

    private class ButtonListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent event) {    //Paint the figure associated with the button click
                canvas.add(new FigurePanel(FigurePanel.OVAL), BorderLayout.CENTER);
                canvas.repaint();
            }
    }

    class ButtonPanel extends JPanel {

        private JButton[] Jbuttons = new JButton[11];
        //Constructor
        ButtonPanel() {

            setLayout(new GridLayout(4, 4)); 

            // Create buttons to attach to the buttons panel
            Jbuttons[0] = new JButton("Change Colour");
            Jbuttons[1] = new JButton("Up");
            Jbuttons[2] = new JButton("Text");
            Jbuttons[3] = new JButton("Left");
            Jbuttons[4] = new JButton("Enlarge");
            Jbuttons[5] = new JButton("Right");
            Jbuttons[6] = new JButton("Rectangle");
            Jbuttons[7] = new JButton("Down");
            Jbuttons[8] = new JButton("Circle");
            Jbuttons[9] = new JButton("Save");
            Jbuttons[10] = new JButton("Load");

            //Add the buttons to the buttons panel
            for (int i=0; i<11; i++) {
                Jbuttons[i].addActionListener(new ButtonListener());
                buttons.add(Jbuttons[i]);
            }
    }
    }

class CanvasPanel extends JPanel {

        //Constructor
        CanvasPanel() {
            // Create "canvas" to hold a label for the buttons panel along with the button panel itself
             this.setLayout(new BorderLayout());
             this.add(new JLabel("CONTROL PANEL"),BorderLayout.NORTH);
             this.add(buttons, BorderLayout.WEST); //LINE 71 add the button panel to the canvas panel

             //test
             this.add(new FigurePanel(FigurePanel.RECTANGLE), BorderLayout.CENTER);
        }
}
}
导入java.awt.BorderLayout;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入javax.swing.JButton;
导入javax.swing.JLabel;
导入javax.swing.JPanel;
公共类miniCADFrame扩展了JPanel{
private CanvasPanel canvas=新建CanvasPanel();//第17行
私有按钮面板按钮=新按钮面板();
公共迷你卡框架(){
//构造函数,创建主面板
此.setLayout(新的BorderLayout());
this.add(canvas,BorderLayout.CENTER);
}
私有类ButtonListener实现ActionListener{
@凌驾
public void actionPerformed(ActionEvent事件){//绘制与按钮单击关联的图形
添加(新的FigurePanel(FigurePanel.OVAL),BorderLayout.CENTER);
canvas.repaint();
}
}
类ButtonPanel扩展了JPanel{
私有JButton[]Jbuttons=新JButton[11];
//建造师
按钮面板(){
setLayout(新的GridLayout(4,4));
//创建要附加到按钮面板的按钮
Jbuttons[0]=新JButton(“更改颜色”);
JButton[1]=新JButton(“Up”);
Jbuttons[2]=新JButton(“文本”);
Jbuttons[3]=新JButton(“左”);
Jbuttons[4]=新JButton(“放大”);
JButton[5]=新JButton(“右”);
Jbuttons[6]=新JButton(“矩形”);
Jbuttons[7]=新JButton(“向下”);
JButton[8]=新JButton(“圆”);
Jbuttons[9]=新JButton(“保存”);
Jbuttons[10]=新JButton(“加载”);
//将按钮添加到按钮面板

对于(inti=0;i我认为这是因为您在按钮之前实例化了画布。
buttons变量用于CanvasPanel的构造函数

我认为这是因为您在按钮之前实例化了画布。
buttons变量在CanvasPanel的构造函数中使用。

您使用的是netbeans吗?
按钮。add
按钮是
ButtonPanel
,它没有
add
方法。@nachokk扩展了JPanel,是吗?@sᴜʀᴇsʜᴀᴛᴛᴀ 不,我使用的是EclipseWhat line是
miniCADFrame.java:71
?您使用的是netbeans吗?
按钮。add
按钮是
ButtonPanel
按钮,它没有
add
方法。@nachokk因为它扩展了JPanel,不是吗?@sᴜʀᴇsʜᴀᴛᴛᴀ 不,我正在使用EclipseWhat line is
miniCADFrame.java:71
?是的,这是问题之一!谢谢。另一个问题是使用按钮。在按钮的构造函数中添加。按钮在构建之前无法添加,所以我应该做的只是说添加(Jbuttons[I])。一旦我做了这两个更改,它就工作了!是的,这是问题之一!谢谢。另一个问题是使用按钮。在按钮的构造函数中添加。按钮在构建之前无法添加,所以我应该做的只是说添加(Jbuttons[I])。一旦我做了这两个更改,它就工作了!