-4

array index out of bounds exception在尝试将文件中的数据读入数组时得到。该文件有 700 行数据,类似于:

"Vasculitis_PlasmaExchange", "#FCE883", "http://ncbi.nlm.nih.gov/pubmed/18646089", "(252, 232, 131)"

"Vasculitis_Prednisone", "#C5E384", "http://ncbi.nlm.nih.gov/pubmed/19588365", "(197, 227, 132)"

我的代码是:

static{  
    COLOR_CODES = new ArrayList<String[]>();

    try{ 
        FileReader fr = new FileReader("Crayon.properties");
        BufferedReader br = new BufferedReader(fr);
        String line;

        while ( (line = br.readLine()) != null) {       

            COLOR_CODES.add(new String[]{line});               
        } 
        br.close();
        fr.close();

    }catch (Exception e){
        throw new IllegalStateException("Couldn't load array file");
    }       
}

@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException,
        IOException
{
    JSONArray fullColorArray;
    String query = request.getParameter("q");

    try {
        int count = 0;
        if (query.equals(m_lastQuery)) {
            fullColorArray = m_lastResults;
            count = m_lastResults.length();
        } else {
            m_lastQuery = query;

            fullColorArray = new JSONArray();
            for (String[] colorCode : COLOR_CODES) {
                String colorName = colorCode[0];
                String lowerColor = colorName.toLowerCase();
                int has = lowerColor.indexOf(query.toLowerCase());

                if (!query.isEmpty() && (query.equals("*") || has >= 0)) {
                    JSONObject color = new JSONObject();
                    color.put("DisplayName", colorName);
                    color.put("Value", colorCode[1]); // <-------- ArrayIndexOutOfBoundsException
                    color.put("Description", colorCode[2]);
                    color.put("RGB", colorCode[3]);
                    fullColorArray.put(color);
                    count++;
                }
            }
            m_lastResults = fullColorArray;
        } 

空指针异常:

HTTP 错误:500

内部服务器错误

RequestURI=/multivaluesuggestboxexample/colors

造成的:

在 javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 在 javax.servlet.http.HttpServlet 的 org.spiffyui.spiffynavigation.server.CrayonColorsServlet.doGet(CrayonColorsServlet.java:95) 的 java.lang.NullPointerException。 org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 的服务(HttpServlet.java:820) org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 的 org.mortbay .jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 在 org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 在 org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java :726) 在 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 在 org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:206) 在 org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 在 org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java: 324) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser .java:514) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 在 org.mortbay.io.nio.SelectChannelEndPoint。在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 运行(SelectChannelEndPoint.java:395)mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java:324) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java :211) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org.mortbay.thread.QueuedThreadPool$PoolThread。运行(QueuedThreadPool.java:488)mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 在 org.mortbay.jetty.Server.handle(Server.java:324) 在 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)在 org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829) 在 org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) 在 org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java :211) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org.mortbay.thread.QueuedThreadPool$PoolThread。运行(QueuedThreadPool.java:488)handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) at org.mortbay.jetty .HttpParser.parseAvailable(HttpParser.java:211) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org. mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:829) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514) at org.mortbay.jetty .HttpParser.parseAvailable(HttpParser.java:211) 在 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org. mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)380) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)380) 在 org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) 在 org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488)

(基于CrayonColorsServlet.java

请帮忙。

AM莫汉饶

4

4 回答 4

4

我想你想要这样的东西:

 while ( (line = br.readLine()) != null)        
      COLOR_CODES.add(line.split(","));               
于 2013-05-01T11:02:18.500 回答
1

您没有指定 ArrayIndexOutOfBounds 异常发生的位置 - 我假设该位置不在上面的代码中。

为什么要构造数组的 ArrayList?你知道这条线

COLOR_CODES.add(new String[]{line});

向 ArrayList 添加一个数组;数组本身包含一个元素,即刚刚读取的行。

难道是你想做类似的事情

COLOR_CODES.add(line.split('insert_your_split_regex_here'));

?

于 2013-05-01T11:02:00.150 回答
1

String[]根据您的分隔符将行拆分为。

于 2013-05-01T11:07:01.827 回答
0

我认为该代码不可能给出该异常。

  • 该代码中使用的任何方法或原始操作都不会引发该异常
  • 如果他们(假设地)这样做了,那么catch它将把它变成一个不同的异常,并且您不会在堆栈跟踪中看到任何原始异常的痕迹(如果有的话)。

我想你会发现它被抛出了一些其他代码。除非包含其他代码和堆栈跟踪,否则我认为我们无法为您提供帮助。(更好的是,提供一个SSCCE ...以便我们可以重现错误。)

    -
于 2013-05-01T11:03:53.827 回答