简体   繁体   English

需要协助纠正以下代码

[英]Require assistance with correcting the following code

I dont understand what I am doing wrong here. 我不明白我在做什么错。 I get the following error: 我收到以下错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Student.paint(Student.java:19)
    at School$ButtonHandler.actionPerformed(School.java:127)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3260)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

The following code is supposed to draw a rectangle for whatever grade the user types using the textfield: 以下代码应针对用户使用文本字段键入的等级绘制一个矩形:

public class Student extends Person {

    static Graphics g;

    public static void paint(Graphics g, int gradelevel) {
        if (gradelevel == 9) {
            g.setColor(Color.green);
            g.fillOval(100, 100, 50, 50);
        } else if (gradelevel == 10) {
            g.setColor(Color.cyan);
            g.fillOval(200, 200, 100, 100);
        } else if (gradelevel == 11) {
            g.setColor(Color.red);
            g.fillOval(200, 200, 100, 100);
        } else if (gradelevel == 12) {
            g.setColor(Color.blue);
            g.fillOval(200, 200, 100, 100);
        }
    }

}

You declared 你宣布

 static Graphics g;

and g never initialized. g从未初始化。 so when you called g.setColor(Color.green); 因此,当您调用g.setColor(Color.green); , NullPointerException NullPointerException

Just realized that there are two g's in your code. 刚意识到您的代码中有两个g。

 public static void paint(Graphics g, int gradelevel)

So while calling paint method you might passing the static Graphics g; 因此,在调用paint方法时,您可能会传递static Graphics g; which remained un initialized. 仍未初始化。

For more accurate answer please show, how you are calling paint method. 有关更准确的答案,请说明如何调用paint方法。

For graphics application, you need to extends a Container (eg JFrame , JPanel ) than override paintComponent(Graphics g) method. 对于图形应用程序,您需要extends一个Container(例如JFrameJPanel ),而不是重写paintComponent(Graphics g)方法。 Look at following code sample. 看下面的代码示例。 Otherwise, declare a non-initialized Graphics class will throw NPE . 否则,声明一个未初始化的Graphics类将抛出NPE

public class Student extends JPanel {

    @Override
    protected void paintComponent(Graphics g) {
        g.setColor(Color.green);
        g.fillOval(100, 100, 50, 50);
        ..............
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM