NullPointerException +调试问题

时间:2014-12-26 15:16:56

标签: java eclipse swing debugging nullpointerexception

我的目标是创建以下内容:一系列同心圆,每个圆都有一个随机颜色作为轮廓,希望能创造出漂亮的东西。我这样做的方法是绘制一系列直径逐渐增大的椭圆(未填充),范围从变量 innerDiameter outerDiameter

我遇到了一些问题,并且会以这样一种方式对其进行说明:其他人可以从这个帖子中获取信息,而不是仅仅帮助我。

1)在Eclipse上,我的JPanel声明旁边有一个感叹号: mainPanel ,表示它从未被使用过,当它明显在代码中。我在这一行旁边发表评论,以使其更清晰。我已经尝试关闭eclipse并剪切和重新编写源代码等等所以我猜它是愚蠢的。

2)我正在抛出 NullPointerExceptions ,首先是在尝试将 y 的值分配给帧的高度减去变量 i <的行/ em>的。我不知道为什么会这样;据我所知,在第一轮循环中, y 的值将为零,但为什么这意味着发生错误我不知道。再次看到关于来源的评论。

3)为了检查这一点,我将 y 的值更改为一个常数,此时下一行会抛出错误,我老实说不知道为什么并且为此一会儿。

4)调试没有帮助,我在一个方法的开头放了一个断点,并尝试逐行“跳过”,只是为了找到调试器跳过并最终得到上面提到的错误。知道为什么会这样吗?

很高兴重新编辑或编辑帖子以使其对其他人更有用,我是Java的新手,所以感谢大家在这里提供的所有帮助。感谢

import java.awt.*;
import javax.swing.*;

public class CircleGenerator {
    private int outerDiameter;
    private int innerDiameter;
    private int colorRange;
    private Color bgColor;
    private JFrame frame;        // 1)this is where my first point occurs.
    private JPanel mainPanel;
    //private JButton nextCircleButton;
    private CircleDrawer drawer;

    public CircleGenerator(int outer, int inner, int colorRange, Color bgColor) {
        this.outerDiameter = outer;
        this.innerDiameter = inner;
        this.colorRange = colorRange;
        this.bgColor = bgColor;
    }

    public static void main(String[] args) {
        CircleGenerator myGenerator = new CircleGenerator(30,3,200,Color.RED);
        myGenerator.setupGUI();
        //myGenerator.genCircle();
    }
    public void setupGUI() {
        // Sets up the environment for the circles to be drawn
        JFrame frame = new JFrame("Beautiful Circles");
        JPanel mainPanel = new JPanel();
        mainPanel.setBackground(bgColor);
        //JButton nextCircleButton = new JButton("Next Circle");          //will use later to regenerate more circles
        CircleDrawer drawer = new CircleDrawer();
        mainPanel.add(drawer);
        frame.getContentPane().add(mainPanel);
        frame.setSize(outerDiameter+innerDiameter, outerDiameter+innerDiameter);
        frame.setVisible(true);
        genCircle();    
    }

    private void genCircle() {
        // generate the necessary parameters to send to the Circle Drawer
        for (int i = innerDiameter; i < outerDiameter+1; i++) {
            int red = (int) (Math.random() * colorRange) + 1;
            int green = (int) (Math.random() * colorRange + 1);
            int blue = (int) (Math.random() * colorRange + 1);
            int x = i - innerDiameter;
            int y = frame.getContentPane().getHeight() - i;         //2) the first NullPointerException
            drawer.updateValues(i, x, y, red, green, blue);         //3) where another NullPointerException is thrown.
            drawer.repaint();
        }

    }

    class CircleDrawer extends JPanel {
        private int diameter;
        private int x;       //  the two x and y values are for the
        private int y;       //  coordinates of the upper left corner of the oval.
        private int red;
        private int green;
        private int blue;

        void updateValues(int diameter, int x, int y, int red, int green, int blue) {
            this.diameter = diameter;
            this.x = x;
            this.y = y;
            this.red = red;
            this.green = green;
            this.blue = blue;
        }

        @Override
        protected void paintComponent(Graphics g) {
            g.setColor(new Color(red,green,blue));
            g.drawOval(x,y,diameter,diameter);
        }
    }

}

0 个答案:

没有答案