如何解决:Exception in thread "main" java.lang.NullPointerException

长乐亦未央 2016-05-03 04:22:21
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame.*;

class win extends JFrame{
String data[][]={{"file","edit","view","help"},{"new","open","save"},{"copy","paste"},{"font"},{"find"}};
JMenuBar bar=new JMenuBar();
JMenu menu[];
JMenuItem item[][];

win(){
setBounds(500,500,500,500);
for(int i=0;i<data.length;i++){
for(int j=0;j<data[i].length;j++){
if(i==0)
menu[j]=new JMenu(data[i][j]);
else{
item[i-1][j]=new JMenuItem(data[i][j]);
menu[i-1].add(item[i-1][j]);
}
}
}

for(int i=0;i<data[0].length;i++)
{bar.add(menu[i]);}
add(bar);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}

public static void main (String args[]){
new win();
}

}


...全文
299 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
长乐亦未央 2016-05-03
  • 打赏
  • 举报
回复
统一回复: 是我犯蠢了= = 感谢楼上各位,现贴上改正后代码(局部): ① JMenu menu[]=new JMenu[4]; JMenuItem[][] item=new JMenuItem[4][]; ② else{ int m=data[i].length; item[i-1]=new JMenuItem[m]; item[i-1][j]=new JMenuItem(data[i][j]); menu[i-1].add(item[i-1][j]); } 对于②,用来初始化不等长二维数组比较方便
-江沐风- 2016-05-03
  • 打赏
  • 举报
回复
数组是需要初始化长度的。。。就像这样:
JMenu     menu[] = new JMenu[5];
JMenuItem item[][] = new JMenuItem[5][5];
x2123262 2016-05-03
  • 打赏
  • 举报
回复
menu 和 item 没初始化,而且没有定义长度。 你所说的在for里面初始化是错误的,那是赋值,并非初始化。 正确的初始化格式 拿int 举例子 int [] a = new int[数组长度]; int [] a = {你要放在数组中的数据,逗号隔开}; 直接赋值是不行,java的数组一旦new出来就不允许改变长度。 menu[j]=new JMenu(data[i][j]); 你的这个代码相当于 menu[] a = {}; //实际上是不会创建对象出来的,这只是个比喻 第一次循环i 和 j 都等于0 menu[0] = new JMenu(data[0][0]); 这样应该就能理解了把
秋小鬼 2016-05-03
  • 打赏
  • 举报
回复
首先先把这两段调整下: JMenu menu[]; JMenuItem item[][]; 变为 JMenu[] menu; JMenuItem[][] item; 再来看 if(i == 0) { menu[j] = new JMenu(data[i][j]); //这句明显是在给menu这个变量的[j]赋初值,但我没看见之前你在哪有过初始化menu,所以这一定会错的,后面情况是一样 } else{ item[i-1][j] = new JMenuItem(data[i][j]); menu[i-1].add(item[i-1][j]); }
renwotao2009 2016-05-03
  • 打赏
  • 举报
回复
打断点,调试, java.lang.NullPointerException一般由于对象引用为空时,调用成员函数时导致的,你应该检测你的对象生成是否成功,最简单的方式就是检测对象引用是否为null,找出原因。
长乐亦未央 2016-05-03
  • 打赏
  • 举报
回复
引用 2 楼 tangxheng 的回复:
item也没初始化长度
我在for循环里初始化的
tangxheng 2016-05-03
  • 打赏
  • 举报
回复
item也没初始化长度
tangxheng 2016-05-03
  • 打赏
  • 举报
回复
menu 没有初始化吧

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧