java.lang.NullPointerException错误原因及解决思路

本机环境是在myeclipse2017报错

错误信息可能是这样,很多时候碰到这样错误,不知道该怎么入手,下面是报空指向异常的其中一种情况

十一月 27, 2018 11:13:08 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [jsp] in context with path [/testjdbc] threw exception [An exception occurred processing JSP page /home.jsp at line 37

34:               <td>鎿嶄綔2</td>
35:           </tr>
36:           <%
37:         for(int i=0;i<user.length;i++){
38:          %>
39:               <tr>
40:                   <td><%=user[i].getUsername()%></td>


Stacktrace:] with root cause
java.lang.NullPointerException
    at org.apache.jsp.home_jsp._jspService(home_jsp.java:155)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:443)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:385)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:329)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:474)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:783)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:789)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1437)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)

主要的错误信息是:java.lang.NullPointerException

一般来说出现的错误都能从错误信息找到哪里错了:

 从这句话能看出,错误的类型是空指向异常.

 

这里提示了,在home.jsp页面的37行错了(不要看到那里乱码了就以为是编码问题,要注意它的报错类型),其实这种在jsp页面的空指针比较好找,因为已经告诉你在哪里有可能会错了,接下来就取那里看一下

 

 

这是我的代码,37行可能错的是不是就是user》length这个位置啊,user就是上面23行那里从request域的userList里面取出来的,对象数组。

报错的原因:

user为null,你用了一个null的东西去使用length,可以尝试像上面那个图24行加一个判断是否为null。

有可能是你一运行项目就报错(可能这个页面是首页),或者点某个功能的时候报错,其实就是也是一个意思,user为空了。

就算注释掉37行,40-46行也会报错,因为在使用一个null的引用,可以不断地往上一步看看值到底是在哪里消失。

这里就不给解决的过程,因为每个人代码不一样,过程没什么太大用,主要是要理解出错的原因。

用一个程序模拟出错的原因:

 从这段代码可以看到,user是==null,所以那个输出语句等于System.out.println("user对象的值为:" + null.getName());

使用一个null的引用,一般这种类型的错误是这样的

所以肯定会报错。

理解了原因,接下来解决错误就好解决了。。。

猜你喜欢

转载自blog.csdn.net/weixin_41746397/article/details/84562711
今日推荐