首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EventQueue和EventDispatch误差

EventQueue和EventDispatch误差
EN

Stack Overflow用户
提问于 2015-04-16 02:34:04
回答 1查看 40关注 0票数 0

我正在构建一个Java程序,它允许根据菜单栏中的径向按钮改变图像。我相信大部分代码是准确的,然而,我已经撞到了一个速度。我怎么能找出我为什么会犯这么多错误呢?

代码语言:javascript
复制
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);
            }
        });
    }
}

错误:

代码语言:javascript
复制
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at MenuAssignment.<init>(MenuAssignment.java:33)
    at MenuAssignment$1.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.access$400(EventQueue.java:82)
    at java.awt.EventQueue$2.run(EventQueue.java:676)
    at java.awt.EventQueue$2.run(EventQueue.java:674)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-16 02:42:49

  1. Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException是由picture在使用之前没有初始化而引起的.
  2. createMenuBar从来不被调用,所以屏幕上没有添加任何内容。
  3. menuBar从未分配给帧(setJMenuBar),因此不会出现
  4. menucatSelectdogSelect从未添加到menu中。
  5. 默认情况下,"cat“菜单项被选中,这与屏幕上的菜单项不匹配
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29664380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档