在我的程序中,当我按下按钮时,我有这个错误" AWT-EventQueue-0" java.lang.NullPointerException" [重复]。

问题描述 投票:0回答:1

这段代码用于在graphic2d中绘制形状,但当我按下绘制按钮时,我有一个错误,我不知道为什么我有一个null指针异常,我想这个错误可能来自于 "向前,向右,向左和移动到 "的方法,我是新的java,我在谷歌搜索,但我没有找到解决方案。

误区

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        ayaaaa
            at com.company.Main.actionPerformed(Main.java:101)
            at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
            at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
            at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
            at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
            at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:269)
            at java.desktop/java.awt.Component.processMouseEvent(Component.java:6578)
            at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3343)
            at java.desktop/java.awt.Component.processEvent(Component.java:6343)
            at java.desktop/java.awt.Container.processEvent(Container.java:2259)
            at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4961)
            at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2317)
            at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793)
            at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
            at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4539)
            at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4480)
            at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2303)
            at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2758)
            at java.desktop/java.awt.Component.dispatchEvent(Component.java:4793)
            at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:766)
            at java.desktop/java.awt.EventQueue.access$500(EventQueue.java:97)
            at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:717)
            at java.desktop/java.awt.EventQueue$3.run(EventQueue.java:711)
            at java.base/java.security.AccessController.doPrivileged(Native Method)
            at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89)
            at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:99)
            at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:739)
            at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:737)
            at java.base/java.security.AccessController.doPrivileged(Native Method)
            at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:89)
            at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:736)
            at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:199)
            at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
            at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
            at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
            at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
            at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

我的代码。

    package com.company;
        import javax.swing.*;
        import java.awt.*;
        import java.awt.event.ActionEvent;
        import java.awt.event.ActionListener;

        public class Main  extends JFrame implements ActionListener {
            Graphics2D g2d;

            Container c;
            JLabel label_x, label_y,label_len,label_angle,label_direction,label_shape;
            JTextField text_x,text_y,text_len,text_angle,text_direction,text_shape;
            JButton draw;
            public Main(){

                c = getContentPane();
                c.setLayout(null);
                label_x = new JLabel("x");
                label_x.setBounds(20, 20, 50, 30);
                text_x = new JTextField();
                text_x.setBounds(70, 20, 50, 30);
                label_len = new JLabel("Lenght");
                label_len.setBounds(130, 20, 50, 30);
                text_len = new JTextField();
                text_len.setBounds(180, 20, 50, 30);
                label_angle = new JLabel("Angle");
                label_angle.setBounds(240, 20, 50, 30);
                text_angle = new JTextField();
                text_angle.setBounds(290, 20, 50, 30);
                label_y = new JLabel("y");
                label_y.setBounds(20, 60, 50, 30);
                text_y = new JTextField();
                text_y.setBounds(70, 60, 50, 30);

                label_direction = new JLabel("Direction");
                label_direction.setBounds(130, 60, 70, 30);
                text_direction = new JTextField();
                text_direction.setBounds(200, 60, 50, 30);
                label_shape = new JLabel("Shape to draw");
                label_shape.setBounds(260, 60, 100, 30);
                text_shape= new JTextField();
                text_shape.setBounds(360, 60, 50, 30);
                draw = new JButton("Draw");
                draw.setBounds(200, 140, 100, 50);
                draw.addActionListener(this);
                c.add(label_x);
                c. add(label_y);
                c. add(text_x);
                c. add(text_y);
                c. add(label_angle);
                c. add(label_direction);
                c. add(label_len);
                c. add(label_shape);
                c. add(draw);
                c. add(text_angle);
                c. add(text_len);
                c. add(text_shape);
                c.  add(text_direction);
                c.setBackground(Color.gray);
                setVisible(true);
                setSize(600,600);
            }
            public void drawshape(int x,int y,int len,int dir,double angle,String s){
                System.out.println("ayaaaa");
                for(int i=0;i<s.length();i++){
                    char z=s.charAt(i);
                    if(z=='F'){
                        forward(len);
                    }else if(z=='+'){
                        right(angle);
                    }else if(z=='-'){
                        left(angle);
                    }else if(z=='r'){
                        g2d.setColor(Color.red);   }
                    else if(z=='b'){
                        g2d.setColor(Color.blue);  }
                    else if(z=='g'){
                        g2d.setColor(Color.green);
                    }
                }
            }

            public void left(double a){
                g2d.rotate(-a*Math.PI/180);
            }
            public void right(double a){
                g2d.rotate(a*Math.PI/180);
            }
            public void forward(int len){
                g2d.drawLine(0,0,len,0);
                g2d.translate(len,0);
            }
            public void moveTo(int x,int y){
                g2d.translate(x,y);
            }

            public static void main(String[] args) {
        new Main();
            }
            public void actionPerformed(ActionEvent e) {
                if (e.getSource() == draw) {
                    System.out.println("ayaaaa");
                  //  g2d.drawLine(0,0,50,0);
                    drawshape(Integer.parseInt(text_x.getText()),Integer.parseInt(text_y.getText()),Integer.parseInt(text_len.getText()),
                            Integer.parseInt(text_direction.getText()),Double.parseDouble(text_angle.getText()),text_shape.getText());
                }
            }

        }
java graphics
1个回答
0
投票

你从来没有初始化 Graphics2D g2d; 所以它是空的。在许多方法中,例如 drawshape 你调用它的一些方法,例如 g2d.setColor(Color.red);. 这些调用会产生一个 NullPointerException.

什么是NullPointerException,如何解决? 有关NullPointerException的详细解释。

© www.soinside.com 2019 - 2024. All rights reserved.