import java.awt.event.*;
import javax.swing.*;
public class muxic extends JFrame
{
public muxic()
{
super("MusicBox");
JMenuBar mBar = new JMenuBar();
setJMenuBar(mBar);

JMenu [] m = {new JMenu("文件(F)"),new JMenu("关于(A)")};
char [] [] mC = {{'F','A'},{'O','Q'}};
JMenuItem [] [] mI = 
{
{new JMenuItem("打开(O)"),new JMenuItem("保存(S)")},
{new JMenuItem("退出(Q)"),new JMenuItem("粘贴(V)")}

};
int i,j;

for(i = 0; i < m.length; i++)
{
mBar.add(m[i]);
m[i].setMnemonic(mC[0][i]);
for(j = 0; j < mI[i].length; j++)
{
m[i].add(mI[i][j]);
mI[i][j].setMnemonic(mC[i + 1][j]);
mI[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl" + mC[i + 1][j]));
mI[i][j].addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
JMenuItem mItem = (JMenuItem)e.getSource();
System.out.println("run:" + mItem.getText());
}
}

);  //方法addActionListener调用结束
}
}
m[0].insertSeparator(1);
}

public static void main(String[] args)
{
JFrame app = new muxic();

app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setSize(250,120);
app.setVisible(true);
}
}写了关于菜单的框架,编译无错,运行报异常是怎么回事?

解决方案 »

  1.   

    数组越界了,  为啥要+1呢?  去掉+1就没有问题了
    mI[i][j].setMnemonic(mC[i+1][j]);
    mI[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl" + mC[i+1][j]));
    改成
    mI[i][j].setMnemonic(mC[i][j]);
    mI[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl" + mC[i][j]));
      

  2.   

    char [] [] mC = {{'F','A'},{'O','Q'}};
    mI[i][j].setMnemonic(mC[i + 1][j]);mC 里面就两个数据你mC【i+1】 必须出数组下标越界的异常啊
    你把mC[i+1]都换成[i]package testSwing;import java.awt.event.*;
    import javax.swing.*;
    public class muxic extends JFrame
    {
        public muxic()
        {
            super("MusicBox");
            JMenuBar mBar = new JMenuBar();
            setJMenuBar(mBar);
            
            JMenu [] m = {new JMenu("文件(F)"),new JMenu("关于(A)")};
            char [] [] mC = {{'F','A'},{'O','Q'}};
            JMenuItem [] [] mI = 
            {
                {new JMenuItem("打开(O)"),new JMenuItem("保存(S)")},
                {new JMenuItem("退出(Q)"),new JMenuItem("粘贴(V)")}
                        
            };
            int i,j;
            
            for(i = 0; i < m.length; i++)
            {
                mBar.add(m[i]);
                m[i].setMnemonic(mC[0][i]);
                for(j = 0; j < mI[i].length; j++)
                {
                    m[i].add(mI[i][j]);
                    mI[i][j].setMnemonic(mC[i][j]);
                    mI[i][j].setAccelerator(KeyStroke.getKeyStroke("ctrl" + mC[i][j]));
                    mI[i][j].addActionListener(new ActionListener()
                    {
                        public void actionPerformed(ActionEvent e)
                        {
                            JMenuItem mItem = (JMenuItem)e.getSource();
                            System.out.println("run:" + mItem.getText());
                        }
                    }
                    
                    );  //方法addActionListener调用结束
                }
            }
            m[0].insertSeparator(1);
        }
        
        public static void main(String[] args)
        {
            JFrame app = new muxic();
            
            app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            app.setSize(250,120);
            app.setVisible(true);
        }
    }
      

  3.   

    颚。。刚才看了一下你写的 貌似没有播放器。
       点击打开的时候你new一个播放器的面板。
      然后针对那个面板编程。。