2013-03-19 42 views
0

我正在用java类编写一个JSP程序,并尝试构建一个对象数组,但得到NullPointerException。请理清我的问题。带有空指针异常的对象数组

我的Java类是MChart.java在这里如下:

package myPackages; 

public class MChart 
{ 
    private String[] stateId = new String [100]; 
    private String[] rule  = new String[100]; 
    private String[] dotPosition = new String[100]; 
    private String[] backPointer = new String [100]; 
    private String[] operation = new String[100]; 

    public void intialize (String s, String r, String dp, String bp, String o) 
    { 

     stateId[0] = s; 
     rule[0]  = r; 
     dotPosition[0] = dp; 
     backPointer[0] = bp; 
     operation[0] = o; 

    } 
    public String getStateID(int i) 
    { 
     return stateId[i]; 
    } 
    public String getRule(int i) 
    { 
     return rule[i]; 
    } 
    public String getDotPosition(int i) 
    { 
     return dotPosition[i]; 
    } 
    public String getBackPointer(int i) 
    { 
     return backPointer[i]; 
    } 
    public String getOperation(int i) 
    { 
     return operation[i]; 
    } 
} 

,现在我的JSP文件如下:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> 
<%@ page import="java.sql.*" %> 
<%@ page import="java.io.*" %> 
<%@ page import="java.util.*" %> 
<%@ page import="myPackages.MChart"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" > 
<title>QASKU URDU PARSER</title> 
<!-- scripting code is deleted --> 
</head> 
<body> 
<form name="myform" method="get" > 

<div align="center" onKeyPress="return checkSubmit(event)"> 
<h4>QASKU URDU PARSER</h4><br> 
<h5>Type sentence using Urdu/Arabic script only and then press the 'Parse' button below</h5><br> 
<textarea cols="100" rows="5" style="text-align: right" name="mytextarea" id="message" >Type here</textarea> 
<script type="text/javascript"> blurfocus("message"); </script> 
<br><br> 
<input type="submit" value="Parse" > 
</div> 

</form> 

<% 
try 
{ 
    if (request.getParameter("mytextarea") == null) 
    { 
     out.println("<p align='center'>No Any Input Yet</p>"); 
    } 
    else 
    { 
     <!-- database entries are deleted --> 

     // inputting sentence from user and splitting into an array of strings 

     String sent = request.getParameter("mytextarea"); 
     String[] input = sent.split(" "); 


     //initialize chart and root rule 
     MChart[] chart = new MChart[input.length+1]; 
     // only beginning instance is initiated and the rest will be initiated on 
      runtime // This also the NULL pointer creating statement 
      chart[0].intialize("0", "ROOT S", "0,0", "-1", "Seed"); 

     out.println("<p><table align=center border='1' bgcolor='green' width='75%'><col width='25'><col width='25'><col width='25'><col width='25'><col width='25'>"); 
     out.println("<tr><th align=left>STATEID</th><th align=left>RULE</th><th align=left>DOT-POSITON</th><th align=left>BACK-POINTER</th><th align=left>OPERATION</th></tr>"); 
     out.println("<tr><td align=left>"+chart[i].getStateID(i)+"</td>"); 
     out.println("<td align=left>"+chart[i].getRule(i)+"</td>"); 
     out.println("<td align=left>"+chart[i].getDotPosition(i)+"</td>"); 
     out.println("<td align=left>"+chart[i].getBackPointer(i)+"</td>"); 
     out.println("<td align=left>"+chart[i].getOperation(i)+"</td></tr>"); 
     out.println("</table></p>"); 


} 
catch (Throwable any) 
{ 
    out.println("<p align=center>Java ERROR: "+any+"</p>"); 
    any.printStackTrace(); 
} 
%> 
</body> 
</html> 
+0

你在哪里得到例外? jsp中的'i'是什么?它在哪里分配?我的猜测是它在某些时候超过了99。 – Pete 2013-03-19 20:38:33

+0

我从2天开始就这样,所以这就是我要问的原因。总之,谢谢你的帮助。 – 2013-03-19 20:39:04

+0

'chart [i] .getStateID(i)'你确定不应该是'chart [0] .getStateID(i)'? – Pete 2013-03-19 20:40:09

回答

0

看着刚刚java的,我想我可以看到这个问题

预留100个字符串的空间

private String[] stateId = new String [100]; 

第一和仅第一初始化为S输入

stateId[0] = s; 

除0以外的任何值将给出一个零指示字例外

public String getStateID(int i) 
{ 
    return stateId[i]; 
} 
+0

当然,对于规则[0],点位置[0],背向指针[0]和操作[0]也是如此,但是你的想法是 – 2013-03-19 20:41:44

+0

我在代码中提到了有问题的一行。 – 2013-03-19 20:48:32

+0

是的,你会遇到我提到的问题,但你是对的。它的概念虽然如此: MChart [] chart = new MChart [input.length + 1]; //保留一些MCharts的空间。图表[0] .intialize(“0”,“ROOT S”,“0,0”,“-1”,“种子”); // CALLS图[0]的方法初始化,不构成它。由于图表[0]还没有被构建,所以你会遇到这个问题(目前还没有图表[0],所以你不能调用它的方法。在这个 – 2013-03-19 20:53:12

0

MChart[] chart = new MChart[input.length+1];

此分配的阵列null MChart对象。你立即参考chart[0].intialize("0", "ROOT S", "0,0", "-1", "Seed");

你想要做的第一件事是chart[0] = new MChart()或沿着这些线。显然,您需要为阵列中的每个插槽执行此操作。