java小白求助空指针问题。。

这一段代码只要一运行就会空指针的错误,但是我觉着应该没啥问题啊。。求指点

package Java5;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Java5_14 extends JFrame{
JMenuBar menubar;//JMenuBar不参与布局
JMenu jm1,jm2,jm3,jm4,jm5,jmej;//JMenu有下一级菜单
JMenu [] menugroup={jm1,jm2,jm3,jm4,jm5};
JMenuItem jmi1,jmi2,jmi3,jmi4,jmej1,jmej2;//JMenuItem没有下一级菜单
JMenuItem [] menuitemgroup={jmi1,jmi2,jmi3,jmi4};

JToolBar toolbar;
JButton jb1,jb2,jb3,jb4,jb5,jb6;
JButton buttongroup[]={jb1,jb2,jb3,jb4,jb5,jb6};

JTextArea jta;
JScrollPane js;

public JButton setToolBar(JButton button,String s1,String s2){
    button=new JButton(s1);
    button.setToolTipText(s2);
    return button;
}
public JMenu setMenuBar(JMenu menu,String s,char c){
    menu=new JMenu(s);
    menu.setMnemonic(c);
    return menu;
}
public Java5_14(){

    jb1=setToolBar(jb1,"new","新建");
    jb2=setToolBar(jb2,"open","打开");
    jb3=setToolBar(jb3,"save","保存");
    jb4=setToolBar(jb4,"cut","剪切");
    jb5=setToolBar(jb5,"paste","粘贴");
    jb6=setToolBar(jb6,"copy","复制");

    jm1=setMenuBar(jm1,"文件(F)",'F');
    jm2=setMenuBar(jm2,"编辑(E)",'E');
    jm3=setMenuBar(jm3,"格式(O)",'O');
    jm4=setMenuBar(jm4,"查看(V)",'V');
    jm5=setMenuBar(jm5,"帮助(H)",'H');
    jmej=setMenuBar(jmej,"新建(N)",'N');

    jmej1=new JMenuItem("文件");
    jmej2=new JMenuItem("模板");

    jmi1=new JMenuItem("打开");
    jmi2=new JMenuItem("保存");
    jmi3=new JMenuItem("另存为");
    jmi4=new JMenuItem("页面设置");

    jta=new JTextArea();
    js=new JScrollPane();
    js.add(jta);

    toolbar=new JToolBar();

    for(int i=0;i<buttongroup.length;i++){
        toolbar.add(buttongroup[i]);
    }

    jmej.add(jmej1);
    jmej.add(jmej2);

    for(int i=0;i<menuitemgroup.length;i++){
        jm1.add(menuitemgroup[i]);
        if(i==1){
            jm1.addSeparator();
        }
    }

    menubar=new JMenuBar();
    for(int i=0;i<menugroup.length;i++){
        menubar.add(menugroup[i]);
    }

    this.add(menubar);
    this.add(toolbar,BorderLayout.NORTH);
    this.add(js);

    this.setSize(500,300);
    this.setLocation(500,300);
    this.setVisible(true);
    //this.setResizable(false);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}
/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Java5_14 j=new Java5_14();
}

}

图片说明

9个回答

buttongroup[]={jb1,jb2,jb3,jb4,jb5,jb6};buttongroup它只在Java5-14新建的时候初始化了,但jb1是在后来才有了值,所以。buttongroup还是空,你并没有重新给他赋值

hehebingbushi
hehebingbushi 回复hehebingbushi: 是这样的。。多谢
大约 3 年之前 回复
hehebingbushi
hehebingbushi 可是jb1就是buttongroup[0]啊,我使用 setToolBar(JButton button,String s1,String s2)这个方法给jb1赋值之后数组怎么会是空的呢。。
大约 3 年之前 回复

图片说明

hehebingbushi
hehebingbushi 我知道问题所在了。。谢谢帮助哈,其实就是没给数组里的成员赋值而已,还有,刚才手快采纳了楼上的评论。。我真是觉着肥肠对不起你。。
大约 3 年之前 回复
zy_281870667
Bug开发攻城狮 回复hehebingbushi: 你的JMenuItem也是一样的问题,给你改了,参考下 http://pan.baidu.com/s/1o83ZRJW
大约 3 年之前 回复
hehebingbushi
hehebingbushi 回复伈照不宣: 啊啊。。我就是这么写的啊。。可是就还是空指针,我又仔细想过用这种方法应该不会空指针的啊。。这是为什么呢。。我把现在的代码编辑到问题里去,你能帮忙再看一眼不,阿里嘎多!
大约 3 年之前 回复
zy_281870667
Bug开发攻城狮 回复hehebingbushi: 你仔细看下你的代码,我贴图的这代码,测试过,没问题
大约 3 年之前 回复
hehebingbushi
hehebingbushi 还是报空指针的错,从buttongroup的第一个元素就开始报错,我觉着可能是这样,我虽然在另外的方法里给buttongroup的成员都赋值了,但是回到构造方法里之后赋值的内容都失效了,要想解决就得在构造方法里给成员赋初值
大约 3 年之前 回复

你把错误的那个空指针异常在哪行说一下啊,直接找多费劲啊

sinat_26761191
sinat_26761191 回复hehebingbushi: 你说这句有空指针异常,那你在这句之前,用system.out.println(toolbar)system.out.println(buttongroup[i]),看看这哪个空了,在考虑之后的
大约 3 年之前 回复
hehebingbushi
hehebingbushi 啊。。不好意思忘了说,其实从toolbar.add(buttongroup[i]);这一句开始就报错了,之后的每一步调用add()方法其实都是会报错的
大约 3 年之前 回复

JButton jb1,jb2,jb3,jb4,jb5,jb6;
你只定义了,在哪赋值的?
不能把null放到toolbar中

hehebingbushi
hehebingbushi 回复伈照不宣: 你是说让 setToolBar这个方法返回一个JButton对象再赋给jb1 jb2对吧?这个我试过,但是还是会在toolbar.add(buttongroup[i]);这一句这里报空指针的错误。。
大约 3 年之前 回复
zy_281870667
Bug开发攻城狮 回复伈照不宣: public void setToolBar ==> public JButton setToolBar,然后再次给jb1、jb2赋值,即可
大约 3 年之前 回复
zy_281870667
Bug开发攻城狮 回复hehebingbushi: public void setToolBar ==> public JButton setToolBar,然后再次给加班
大约 3 年之前 回复
zy_281870667
Bug开发攻城狮 回复hehebingbushi: 你的setToolBar方法,写的有问题。setToolBar必须在运行之前就指定JButton,不能在运行中指定
大约 3 年之前 回复
hehebingbushi
hehebingbushi 所有的JButton对象都调用了public void setToolBar(JButton button,String s1,String s2)这个方法啊。。调用之后不就赋值了?
大约 3 年之前 回复

JButton jb1,jb2,jb3,jb4,jb5,jb6;
JButton buttongroup[]={jb1,jb2,jb3,jb4,jb5,jb6};
自己调试一下就知道,你的JButton 都只是申明了,并没有新建,把你的JButton都新建一遍

hehebingbushi
hehebingbushi 所有的JButton对象都调用了public void setToolBar(JButton button,String s1,String s2)这个方法啊。。调用之后不就赋值了?
大约 3 年之前 回复

打断点看看,,具体哪个为null,,,

你可以仔细看看,如果是for循环那一行报的空,那就是menugroup是空的,如果是循环里边那一行,那就只能是toolbar了,最好把错贴出来,不看页没法说什么

hehebingbushi
hehebingbushi 已经贴出来了。。
大约 3 年之前 回复

把控制台报的错误贴出来给大牛们看

hehebingbushi
hehebingbushi 已经贴出来了。。
大约 3 年之前 回复

先断点看看你的buttongroup数组中的每个元素是否都有值。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!