日期:2014-05-17  浏览次数:20909 次

关于java.io.Reader的NullPointerException,请高手打救。
今天在多并发测试自己代码的时候,发现后台时不时会报错:
 java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:80)
at com.ccssoft.scap.common.sendRequest.ConstructRequestStr.requestStrConstruct(ConstructRequestStr.java:45)

我的代码:

 InputStreamReader file=null;
//报错的代码--------
file=new InputStreamReader(ConstructRequestStr.class.getResourceAsStream("/ftlFile/"+xmlPath), "GB2312");
//-----------------------
 StringBuffer strBuffer = new StringBuffer();
 int tempchar;
 //读取整个文件
 while ((tempchar = file.read()) != -1) {
strBuffer.append((char)tempchar);
 }
String text = strBuffer.toString();


在网上搜了搜,但还是不知道什么问题。
Reader.java:61的代码:
protected Reader(Object lock) {
if (lock == null) {
           //报错的应该是这里
    throw new NullPointerException();
}
this.lock = lock;
    }


小弟不才,请大神打救,感激不尽!!
------解决方案--------------------
空指针:所谓的空指针异常,就是一个指针是空指针,你还要去操作它。
建议你先调试看看哪个对象的引用是空的,
你判断如果空的情况下采用其他处理方式,例如打印、提示等。
非空情况下你才能操作它。
------解决方案--------------------
InputStreamReader(ConstructRequestStr.class.getResourceAsStream("/ftlFile/"+xmlPath), "GB2312"); ServletActionContext.getServletContext().getResourceAsStream
------解决方案--------------------
空指针异常,你可以在你要获取的值后面添加输出语句,观察控制台是否有值,若为null,则可能该处的值未获得,就需要把输出语句上移,重复上个步骤。用这样的方法去找到是具体哪个部分没有取到值
------解决方案--------------------
ConstructRequestStr.class.getResourceAsStream("/ftlFile/"

你用/开头的路径,表明这个路径是全路径名;
如果不用/开头的路径,说明这个路径是相对于ConstructRequestStr的。
看下你的ftlFile这个包下有没有xmlPath这个文件吧。
------解决方案--------------------
file=new?InputStreamReader(ConstructRequestStr.class.getResourceAsStream("/ftlFile/"+xmlPath),?"GB2312"); 这个地方空了 为啥事 GB2312 而不是 utf-8呢