24小时热门版块排行榜    

查看: 1153  |  回复: 8

MJC_G

新虫 (小有名气)

[求助] java.lang.NullPointerException为什么找不到原因呢?

各位大神好,自己在跑程序的时候遇到了    “读取Excel文件c:\WWW\PHP100.Com\Beijing\Beijing_Data\电科院负荷_15分钟.xls失败:java.lang.NullPointerException”          这个问题,可是同样的读取方式另一个excel表格读起来就没有问题,想请问一下,有谁知道这是为什么吗?
回复此楼
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

pilihaotian

金虫 (初入文坛)

很有可能是中文乱码,导致找不到路径。你可以改成英文测试一下。

发自小木虫Android客户端

» 本帖已获得的红花(最新10朵)

时来运转不变的改变的都是最好的
2楼2015-10-16 07:32:47
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

MJC_G

新虫 (小有名气)

送红花一朵
引用回帖:
2楼: Originally posted by pilihaotian at 2015-10-16 07:32:47
很有可能是中文乱码,导致找不到路径。你可以改成英文测试一下。

您好,您说的是把excel的中文名改成英文试一下对吗?我试了但是还是相同的结果,以您的经验,还有可能是什么原因造成的呢?谢谢啦!
3楼2015-10-16 08:15:51
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

yujiewu

银虫 (正式写手)

4楼2015-10-16 08:25:37
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

jianliu67

木虫 (小有名气)

最好贴一下那部分的代码, 好确定哪一句抛出的异常.

» 本帖已获得的红花(最新10朵)

5楼2015-10-16 08:26:42
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

MJC_G

新虫 (小有名气)

送红花一朵
引用回帖:
5楼: Originally posted by jianliu67 at 2015-10-16 08:26:42
最好贴一下那部分的代码, 好确定哪一句抛出的异常.

嗯嗯,没有提示哪一句抛出异常,但是我把读这个excel之后的数据输出发现读的数字从某一个数字开始就全变为0了,可是excel表里明明是有数据的呀?
6楼2015-10-16 08:31:08
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

MJC_G

新虫 (小有名气)

引用回帖:
5楼: Originally posted by jianliu67 at 2015-10-16 08:26:42
最好贴一下那部分的代码, 好确定哪一句抛出的异常.

//得到负荷出力预测值
        public static void GetLoadData(){
                HourLoad = new double[8760*Time_interval];
                File file = new File(LoadData_Filename);
                FileInputStream in = null;
                double a = 0;
                sum_load=0;
               
                try {
                        //以下为读取负荷数据
                        in = new FileInputStream(file);
                        HSSFWorkbook workbook = new HSSFWorkbook(in);
                        HSSFSheet sheet = workbook.getSheet("Sheet1";
                        // 下面读取Excel的数据
                        HSSFRow row = null;
                        HSSFCell cell = null;
                        int rowNum = 0;//
                        int colNum=0;
                        for (; rowNum < sheet.getLastRowNum()+1; rowNum++) {
                                // 获取第rowNum行
                                row = sheet.getRow((short) rowNum);
                                                cell = row.getCell(colNum);
                                                a = cell.getNumericCellValue();
                                                HourLoad[rowNum]=a;
                        }
                        in.close();
                } catch (Exception e) {
                        System.out.println("读取Excel文件" + file.getAbsolutePath() + "失败:" + e);
                } finally {
                        if (in != null) {
                                try {
                                        in.close();
                                } catch (IOException e1) {
                                }
                        }
                }
                for(int i=0;i<8760*Time_interval;i++){//将系统负荷值变为原来的1.2倍
                        HourLoad=HourLoad*1;
                                       
                }
                //生成8760*time_interval个正态分布负荷的标准差,计算每小时负荷的预测偏差
                double[] σ_load=new double[8760*Time_interval];
                double[] δ_load=new double[8760*Time_interval];
                for(int i=0;i<8760*Time_interval;i++){
                        σ_load=HourLoad/100;
                }
                for(int i=0;i<8760*Time_interval;i++){
                        double q=0;
                        double s=0;
                        double z=0;
                        double x=0;
                        double r=Math.random();
                        if(r>=0&&r<=0.5){
                                q=r;
                        }else {
                                q=1-r;
                        }
                        s=Math.pow((-2)*Math.log(q), 0.5);
                        z=s-((2.515517*s+0.802853*s+0.010328*s)/(1+1.432788*s+0.189269*s+0.001308*s));
                        if(r>=0&&r<0.5){
                                x=-z;
                        }else if (r==0.5) {
                                x=0;
                        }else if (r>0.5&&r<=1) {
                                x=z;
                        }
                        δ_load=σ_load*x;
                }
                for(int i=0;i<8760*Time_interval;i++){
                        HourLoad=HourLoad+δ_load;
                        sum_load+=HourLoad;
                }
        }
就是这段代码出现问题?读取Excel文件c:\WWW\PHP100.Com\Beijing\Beijing_Data\电科院负荷_15分钟.xls失败:java.lang.NullPointerException
7楼2015-10-16 08:33:09
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

MJC_G

新虫 (小有名气)

找到原因了,都是(short)惹的祸。。
8楼2015-10-16 09:28:40
已阅   关注TA 给TA发消息 送TA红花 TA的回帖

jianliu67

木虫 (小有名气)

引用回帖:
6楼: Originally posted by MJC_G at 2015-10-15 19:31:08
嗯嗯,没有提示哪一句抛出异常,但是我把读这个excel之后的数据输出发现读的数字从某一个数字开始就全变为0了,可是excel表里明明是有数据的呀?...

如果你使用 IDE 编程的话, 一般可以一步一步地 debug. 这样会最快地发现哪一句出的错.

如果不使用 IDE 的话, 最好用 log 来跟踪程序的执行. 多放一些打印的语句, 这样就能大致知道什么地方出的错.

Catch general Exception 一般来说不好. 应该更具体一些.
9楼2015-10-17 07:11:37
已阅   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 MJC_G 的主题更新
信息提示
请填处理意见