java - 连接到另一个类时 AWT-EventQueue-0 java.lang.NullPointerException

标签 java nullpointerexception paint

基本上我遇到了错误:

run:Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at PaintV2.UIPanel$1.actionPerformed(PaintGUI.java:line marked)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6527)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6292)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4883)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4705)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4705)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)'

当我制作绘画应用程序时,我试图将我的 GUI 链接到颜色类。我的问题是:我的代码出了什么问题?如果有人知道如何修复它,请您解释一下如何修复它

我的主要方法:

package PaintV2;

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.HashMap;


public class PaintGUI{

    public static void main(String[] args ){

        JFrame frame = new JFrame("test panel 2");

        MainPanel panel = new MainPanel();

        UIPanel uip = new UIPanel(panel);

        frame.setLayout(new BorderLayout());
        frame.add(uip, BorderLayout.NORTH);

        frame.add(panel, BorderLayout.CENTER);
        frame.setSize(900, 900);

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }

}

我的 MainPanel 类:

class MainPanel extends JPanel {   
    int px, py; // radius
    public Color colvals;
    public Colour col;

    public MainPanel(){        
        this.addMouseMotionListener(new MouseMotionAdapter() {
            // store drag coordinates and repaint
                public void mouseDragged( MouseEvent event )
                {
                        px = event.getX();
                        py = event.getY();
                        repaint();
                }
                }); // end call to addMouseMotionListener
    }

    public void paint( Graphics g )
    {       
        g.setColor(Color.RED); 
        g.fillOval( px, py, 15, 15 );
    }
}    

我的 UIPanel 类:

class UIPanel extends JPanel {
    public MainPanel gpanel;
    public Integer data;
    public Color colval;
    public Colour col;

    public UIPanel(MainPanel panel) {
        gpanel = panel;

        Box btnBox = Box.createHorizontalBox();
        btnBox.add(Box.createHorizontalGlue());
        JButton setBtn = new JButton("Set");

        //code for the colour chooser
        //decided to use a dropdow list with hashmap
        final DefaultComboBoxModel colour = new DefaultComboBoxModel();
        colour.addElement("Red");
        colour.addElement("Blue");
        colour.addElement("Yellow");
        colour.addElement("Green");
        final JComboBox colours = new JComboBox(colour);
        JScrollPane colourScroll = new JScrollPane(colours);


        JButton freeBtn = new JButton("FreeHand");
        JButton rectBtn = new JButton("Rectangle");
        JButton circBtn = new JButton("Circle");
        JButton lineBtn = new JButton("line");

        btnBox.add(setBtn);
        btnBox.add(colourScroll);
        btnBox.add(freeBtn);
        btnBox.add(rectBtn);
        btnBox.add(circBtn);
        btnBox.add(lineBtn);
        btnBox.setSize(300, 100);
        btnBox.add(Box.createHorizontalGlue());

        add(btnBox, BorderLayout.NORTH);

        setBtn.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e) {

                data= colours.getSelectedIndex();

                col.setCol(data);//This is where the error is being flagged up              
            }
        });
    }
}

和颜色类别

package PaintV2;

import java.awt.*;
import java.awt.event.*;
import java.util.HashMap;
import javax.swing.*;

public class Colour{

    public Color colVal;

     HashMap<Integer, Color> map = new HashMap<Integer, Color>();

    public Colour() {

        map.put(0, Color.RED);
        map.put(1, Color.BLUE);
        map.put(2, Color.YELLOW);
        map.put(3, Color.GREEN);

    }

    public Color setCol(Integer data) {
        return map.get(data);
    }
}

提前对大量代码和代码困惑表示歉意。另外,如果您需要我编辑任何内容以使其更容易理解,请发布或发布其他内容,我会在可能的情况下对其进行编辑。

最佳答案

似乎您刚刚声明了 col 且未初始化。尝试这样..

public void actionPerformed(ActionEvent e) {

    data= colours.getSelectedIndex();
    if(col == null)
        col = new Colour();
    col.setCol(data);//This is where the error is being flagged up              

}

关于java - 连接到另一个类时 AWT-EventQueue-0 java.lang.NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27018791/

相关文章:

java - 如何取消jtextarea事件?

java - 编辑 JRXML 时 i-report 3.7.6 错误

java - 为了清楚起见,我如何将 MainActivity 功能拆分到另一个类中?

java - 更新 TabLayout 中的 TextView 导致 NullPointerException

java - 油漆方法是什么?它是如何工作的?

java - 重画并不总是有效

java - 将字母从按钮传输到 jLabel 组件

java - 如何使用java访问远程数据库

Java - 更改标签并出现错误

java - JPanel的自定义绘画