有界面,运行时NullPointerException,不知道哪不对,求指导,代码如下import java.awt.*;
import java.awt.event.*;import javax.swing.*;public class MenuFrame implements ActionListener,ItemListener{
JFrame mFrame;
JMenuBar menuBar;
JMenu menu,help,subMenu;
JTextArea textArea;
JMenuItem redItem,blueItem,exitItem,helpItem;
JCheckBoxMenuItem cbItem;

public void go(){
mFrame=new JFrame();
mFrame.setSize(600,400);
mFrame.setResizable(false);

JTextArea textArea=new JTextArea();
textArea.setEditable(false);
JScrollPane scroll=new JScrollPane(textArea);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

menuBar=new JMenuBar ();
menu=new JMenu("Manage");
menuBar.add(menu);

 subMenu=new JMenu("Color");
menu.add(subMenu);
 redItem=new JMenuItem("Red");
 blueItem=new JMenuItem("Blue");
subMenu.add(redItem);
subMenu.add(blueItem);
menu.addSeparator();

 cbItem=new JCheckBoxMenuItem("Check Box");
menu.add(cbItem);

 exitItem=new JMenuItem("Exit");
menu.add(exitItem);

help=new JMenu("Help");
//menuBar.setHelpMenu(help);
menuBar.add(help);
 helpItem=new JMenuItem("help");
help.add(helpItem);

mFrame.setJMenuBar(menuBar);
mFrame.getContentPane().add(scroll,BorderLayout.CENTER);

mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mFrame.setVisible(true);

redItem.addActionListener(new RedListener());
blueItem.addActionListener(new BlueListener());
cbItem.addItemListener(new CBListener());
helpItem.addActionListener(new HelpListener());
exitItem.addActionListener(new ExitListener());

}

public static void main(String args[]) throws Exception{
MenuFrame frame=new MenuFrame();
frame.go();
}

class RedListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
textArea.setForeground(Color.RED);
System.out.println("change color");
}
}

class BlueListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
textArea.setForeground(Color.BLUE);
System.out.println("change color");
}
}

class CBListener implements ItemListener{
public void itemStateChanged(ItemEvent e) {
if(e.getStateChange()==ItemEvent.SELECTED){
textArea.append("Check Box is checked\n");
System.out.println("checked");
}
else{
textArea.append("Check Box is un-checked\n");
System.out.println("unchecked");
}
}
}

class HelpListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.out.println("help");
textArea.append("this is help message:\n");
textArea.append("manage->color button can change text color\n");
textArea.append("after check is check or un-checked,text will display result\n");
}
}

class ExitListener implements ActionListener{
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
}

解决方案 »

  1.   

    从发下代码
    import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class MenuFrame implements ActionListener,ItemListener{
    JFrame mFrame;
    JMenuBar menuBar;
    JMenu menu,help,subMenu;
    JTextArea textArea;
    JMenuItem redItem,blueItem,exitItem,helpItem;
    JCheckBoxMenuItem cbItem;

    public void go(){
    mFrame=new JFrame();
    mFrame.setSize(600,400);
    mFrame.setResizable(false);

    JTextArea textArea=new JTextArea();
    textArea.setEditable(false);
    JScrollPane scroll=new JScrollPane(textArea);
    scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    menuBar=new JMenuBar ();
    menu=new JMenu("Manage");
    menuBar.add(menu);

     subMenu=new JMenu("Color");
    menu.add(subMenu);
     redItem=new JMenuItem("Red");
     blueItem=new JMenuItem("Blue");
    subMenu.add(redItem);
    subMenu.add(blueItem);
    menu.addSeparator();

     cbItem=new JCheckBoxMenuItem("Check Box");
    menu.add(cbItem);

     exitItem=new JMenuItem("Exit");
    menu.add(exitItem);

    help=new JMenu("Help");
    //menuBar.setHelpMenu(help);
    menuBar.add(help);
     helpItem=new JMenuItem("help");
    help.add(helpItem);

    mFrame.setJMenuBar(menuBar);
    mFrame.getContentPane().add(scroll,BorderLayout.CENTER);

    mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mFrame.setVisible(true);

    redItem.addActionListener(new RedListener());
    blueItem.addActionListener(new BlueListener());
    cbItem.addItemListener(new CBListener());
    helpItem.addActionListener(new HelpListener());
    exitItem.addActionListener(new ExitListener());
    }

    public static void main(String args[]) throws Exception{
    MenuFrame frame=new MenuFrame();
    frame.go();
    }

    class RedListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
    textArea.setForeground(Color.RED);
    }
    }

    class BlueListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
    textArea.setForeground(Color.BLUE);
    }
    }

    class CBListener implements ItemListener{
    public void itemStateChanged(ItemEvent e) {
    if(e.getStateChange()==ItemEvent.SELECTED){
    textArea.append("Check Box is checked\n");
    }
    else{
    textArea.append("Check Box is un-checked\n");
    }
    }
    }

    class HelpListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
    textArea.append("this is help message:\n");
    textArea.append("manage->color button can change text color\n");
    textArea.append("after check is check or un-checked,text will display result\n");
    }
    }

    class ExitListener implements ActionListener{
    public void actionPerformed(ActionEvent e) {
    System.exit(0);
    }
    }
    }
      

  2.   

    你在设置监听器的时候是这样写的 redItem.addActionListener(new RedListener()); 也就是你是调用 RedListener 类的构造方法,但是你在写 RedListener 类的时候没有重写构造方法,所以默认的构造方法为空。
      

  3.   

    贴上完整代码package bbs0902;import java.awt.*;
    import java.awt.event.*;import javax.swing.*;public class MenuFrame{
    JFrame mFrame;
    JMenuBar menuBar;
    JMenu menu,help,subMenu;
    JTextArea textArea;
    JMenuItem redItem,blueItem,exitItem,helpItem;
    JCheckBoxMenuItem cbItem;

    public void go(){
    mFrame=new JFrame();
    mFrame.setSize(600,400);
    //mFrame.setResizable(false);
    //mFrame.setLayout(new GridLayout());

    final JTextArea textArea=new JTextArea();
    //textArea.setEditable(false);
    JScrollPane scroll=new JScrollPane(textArea);
    scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

    menuBar=new JMenuBar ();
    menu=new JMenu("Manage");
    menuBar.add(menu);

     subMenu=new JMenu("Color");
    menu.add(subMenu);
     redItem=new JMenuItem("Red");
     blueItem=new JMenuItem("Blue");
    subMenu.add(redItem);
    subMenu.add(blueItem);
    menu.addSeparator();

     cbItem=new JCheckBoxMenuItem("Check Box");
    menu.add(cbItem);

     exitItem=new JMenuItem("Exit");
    menu.add(exitItem);

    help=new JMenu("Help");
    //menuBar.setHelpMenu(help);
    menuBar.add(help);
     helpItem=new JMenuItem("help");
    help.add(helpItem);

    mFrame.setJMenuBar(menuBar);
    mFrame.getContentPane().add(scroll,BorderLayout.CENTER);

    mFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    mFrame.setVisible(true);

    redItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    redItem.setForeground(Color.RED);
    System.out.println("Check!");
    }
    });
    blueItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    blueItem.setForeground(Color.BLUE);
    }
    });
    cbItem.addItemListener(new ItemListener() {
    public void itemStateChanged(ItemEvent e) {
    if(e.getStateChange()==ItemEvent.SELECTED){
    textArea.append("Check Box is checked\n");
    }
    else{
    textArea.append("Check Box is un-checked\n");
    }
    }
    });
    helpItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    textArea.append("this is help message:\n");
    textArea.append("manage->color button can change text color\n");
    textArea.append("after check is check or un-checked,text will display result\n");
    }
    });
    exitItem.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    System.exit(0);
    }
    });
    }

    public static void main(String args[]) throws Exception{
    MenuFrame frame=new MenuFrame();
    frame.go();
    }
    }