初学,实在搞不懂了,自己做的一个单词类,单词按照15字符英文,30字符中文格式打包成res,然后读取,读取后建立公共Word对象数组。出现NullPointerException问题,查了一天搞不懂,那位学长来指点一下,不胜感激。//------简单的CWord类
Class CWord
{
public String strEnglish;
public String strChinese;
public CWord(){}
}//============CWordLib类,运行出现NullPointerException=======================
import java.io.IOException;
import java.io.InputStream; public class CWordLib {
public CWord[] aobjWord; public CWordLib(String strResPath)
{
int i,j; try 

                       //从资源中读取词库,词库规格为15个字符的E文,30个字符的中文
InputStream objIs=this.getClass().getResourceAsStream(strResPath);
byte[] abytBuffer=new byte[objIs.available()];
objIs.read(abytBuffer);
objIs.close();
                        //资源文本格式为utf8
String strWordList=new String(abytBuffer,"UTF-8");
                        //每个单词中英文共45个字符,将文本长度/45计算单词数目
j=strWordList.length()/45; CWord[] aobjWord=new CWord[j];
                        //将每个单词装入aobjWord对象数组
for (i=0;i<j;i++)
{
aobjWord[i]=new CWord();
aobjWord[i].strEnglish=strWordList.substring(i*45,i*45+15);
aobjWord[i].strChinese=strWordList.substring(i*45+16,i*45+45);
                        //这里用system.out.println(aobjWord[i].strEnglish)都显示正常
}


}//try
catch (IOException e)
{
aobjWord=new CWord[0];
System.out.println("Vocabulary resource load failed.");
}


}//public ovid CWordLib

public  static  void main(String[] astrArgument) 
{
CWordLib objWlb=new CWordLib("Cet4Vocabulary.txt");
               //问题在下面这句,出现NULLPointException
System.out.println(objWlb.aobjWord.length);
System.out.println("normal end");
}
}

解决方案 »

  1.   

    objWlb为null 没取到文件
    或者objWlb不为null 但是aobjWord为null
    你这个代码写得不安全 像这种以文件名做参数的肯定要判断是否为null
      

  2.   

    不是文件的问题,我在中间逐行测试过,文件取值没有问题
    在for里面逐个载入aobjWord时也中英文显示正常
    我是初学,问题可能出在语法细节上,比方定义之类,请大家帮帮忙,分不够我会再加晚上又查了一遍Java2参考,还是没搞懂。
      

  3.   

     CWord[] aobjWord=new CWord[j];把 CWord[] 去掉,你这样变成了局部变量,而不是成员了,