EventQueue 和 EventDispatch 错误

EventQueue and EventDispatch Errors

我正在构建一个 Java 程序,该程序允许根据菜单栏中的径向按钮单击来更改图像。我相信大部分代码都是准确的,但是,我遇到了减速带。我怎样才能找出我遇到这么多错误的原因?

import java.awt.*;
import java.awt.event.*;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.*;

public class MenuAssignment extends JFrame implements ActionListener {

    // Images, taken from the official Java Documentation
    static String catString = "Cat";
    static String dogString = "Dog";
    
    // Setup label
    JLabel picture;
    ImageIcon image;
    
    // Radio buttons
    private JRadioButtonMenuItem catSelect;
    private JRadioButtonMenuItem dogSelect;

    public MenuAssignment() {
        
        // Start with cat image
        image = new ImageIcon("images/" + catString + ".gif");
        picture.setIcon(image);
    }
    
    private void createMenuBar() {
        JMenuBar menuBar;
        JMenu menu, submenu;
        JMenuItem menuItem;
        JRadioButtonMenuItem rbMenuItem;

        //Create the menu bar.
        menuBar = new JMenuBar();
        
        //Build the first menu.
        menu = new JMenu("Animals");
        menuBar.add(menu);
        
        image = new ImageIcon("images/Dog.gif");       
        picture = new JLabel(image);
        add(picture);
        
        // Create group of radio buttons
        ButtonGroup group = new ButtonGroup();
        
        // Cat Button
        catSelect = new JRadioButtonMenuItem("Cat");
        catSelect.setActionCommand("Cat");
        catSelect.setSelected(true);
        
        // Dog Button
        dogSelect = new JRadioButtonMenuItem("Dog");
        dogSelect.setActionCommand("Dog");
        
        // Listen for Option
        catSelect.addActionListener(this);
        dogSelect.addActionListener(this);
        
        // return menuBar;
    }
    
    public void actionPerformed(ActionEvent e) {
      image = new ImageIcon("images/" + e.getActionCommand() + ".gif");
      picture.setIcon(image);
      System.out.println(e.getActionCommand());
  }
  
    public static void main(String[] args) {

    EventQueue.invokeLater(new Runnable() {
            public void run() {
                MenuAssignment start = new MenuAssignment();
                start.setVisible(true);
            }
        });
    }
}

错误:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at MenuAssignment.<init>(MenuAssignment.java:33)
    at MenuAssignment.run(MenuAssignment.java:82)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:715)
    at java.awt.EventQueue.access0(EventQueue.java:82)
    at java.awt.EventQueue.run(EventQueue.java:676)
    at java.awt.EventQueue.run(EventQueue.java:674)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext.doIntersectionPrivilege(AccessControlContext.java:86)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:685)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
  1. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 因为 picture 在你使用之前没有初始化...
  2. createMenuBar 从未被调用,因此不会向屏幕添加任何内容
  3. menuBar 从未分配给框架 (setJMenuBar),因此不会出现
  4. menucatSelect 以及 dogSelect 永远不会添加到 menu
  5. 默认选中"cat"菜单项,与屏幕显示不符