【问题标题】:java.lang.NullPointerException in search query in web application - JSPWeb 应用程序中的搜索查询中的 java.lang.NullPointerException - JSP
【发布时间】:2014-01-10 13:38:02
【问题描述】:

我正在尝试访问我的数据库以获取信息,但它一直在抛出空异常。

我已经调用对象和技术人员对象/

addTech.jsp:

    <%@page import="com.example.backend.BackendFactory"%>
<%@page import="java.util.ArrayList"%>
<%@page import="com.example.model.*"%>
<%@ page language="java" contentType="text/html; charset=windows-1255"
    pageEncoding="windows-1255"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Adding Tech</title>
</head>
<%
    String TechId, TechName, TechUserName, TechPass, TechPassVer, TechRank, TechSecQ, TechSecA, TechEmail, TechPhone;
    TechName = request.getParameter("TechName");
    TechUserName = request.getParameter("TechUserName");
    TechPass = request.getParameter("TechPass");
    TechPassVer = request.getParameter("TechPassVer");
    TechRank = request.getParameter("TechRank");
    TechSecQ = request.getParameter("TechSecQ");
    TechSecA = request.getParameter("TechSecA");
    TechEmail = request.getParameter("TechEmail");
    TechPhone = request.getParameter("TechPhone");
    if (TechName != null && TechUserName != null && TechPass != null
            && TechPassVer != null && TechRank != null
            && TechSecQ != null && TechSecA != null
            && TechEmail != null && TechPhone != null)
    {
        Technician t = new Technician(TechName, TechUserName, TechPass,
                new ArrayList<Call>(), TechnicianRank.Beginner,
                TechSecQ, TechSecA, TechPhone, TechEmail, (float) 0.0);
        BackendFactory.getInstance().addTechnician(t);
    }
%>
<body>
    <h1>Adding Technican</h1>
    <form name="tempForm" action="addTech.jsp" method="get">
        <table align="left" border="0" cellpadding="1" cellspacing="1"
            style="width: 500px;">
            <tbody>
                <tr>
                    <td><strong style="color: rgb(255, 0, 0);"><u>Tech
                                Details:</u></strong></td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Id:</td>
                    <td><input name="TechId" readonly="readonly" type="text"
                        value=<%out.print(BackendFactory.getInstance().getTechnicianCurrentId());%> /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Name:</td>
                    <td><input name="TechName" type="text" value="Your first name" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>User name:</td>
                    <td><input name="TechUserName" type="text"
                        value="Your last name" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Password:</td>
                    <td><input name="TechPass" type="password" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Verify Password:</td>
                    <td><input name="TechPassVer" type="password" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Rank:</td>
                    <td><input name="TechRank" readonly="readonly" type="text"
                        value="Beginer" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Security Q:</td>
                    <td><input name="TechSecQ" size="30" type="text"
                        value="Whats your grandmother birth?" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Security A:</td>
                    <td><input name="TechSecA" size="30" type="text"
                        value="Dont remember..." /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Email:</td>
                    <td><input name="TechEmail" type="text"
                        value="example@gmail.com" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Phone:</td>
                    <td><input name="TechPhone" type="text" value="0123456789" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td><input name="addTech" type="submit" value="Submit" /></td>
                </tr>
            </tbody>
        </table>
    </form>
</body>
</html>

addCall.jsp:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="com.google.gwt.dom.client.SelectElement"%>
<%@page import="sun.reflect.CallerSensitive"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<html>
<%@page import="com.example.model.*"%>
<%@page import="com.example.backend.BackendFactory"%>
<%@page import="com.example.backend.ServerBackend"%>
<%@ page language="java" contentType="text/html; charset=windows-1255"
    pageEncoding="windows-1255"%>

<head>
<meta http-equiv="Content-Type"
    content="text/html; charset=windows-1255">
<title>Insert title here</title>
</head>
<body>
    <h1>Adding Call
        <%/*out.print(backend.findTechByName("sabag"));*/%>

        </h1>
    <form name="tempForm" action="addCall.jsp" method="get">
        <%!ServerBackend backend = BackendFactory.getInstance();%>
        <%
            /*backend.addTechnician(new Technician());*/
            //
            String desc, tech, techRank, ClientAddress, ClientFirst, ClientLast;
            desc = request.getParameter("desc");
            tech = request.getParameter("tech");
            ClientAddress = request.getParameter("ClientAddress");
            ClientFirst = request.getParameter("ClientFirst");
            ClientLast = request.getParameter("ClientLast");
            Technician t=null ;
            if (tech != null)
            {
                try
                {
                    t=backend.findTechByName(tech);
                } catch (Exception e)
                {
                    t = new Technician();
                    t.setName(tech);
                    backend.addTechnician(t);
                }
            }
            if (desc != null && tech != null && ClientAddress != null
                    && ClientFirst != null && ClientLast != null)
            {
                Call call = new Call();
                call.setDescription(desc);
                call.setCaller(new Client(ClientFirst + ClientLast,
                        new Address(ClientAddress, ClientAddress,
                                ClientAddress, 45)));
                call.setTechnician(t);
                backend.addCall(call);
            }
            /**/
        %>
        <table align="left" border="0" cellpadding="1" cellspacing="1"
            style="width: 500px;">
            <tbody>
                <tr>
                    <td><strong style="color: rgb(255, 0, 0);"><u>Call
                                Details:</u></strong></td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Id:</td>
                    <td>
                        <div>
                            <input name="id" readonly="readonly" type="text"
                                value=<%out.print(backend.getCallCurrentId());%> />
                        </div>
                    </td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Description:</td>
                    <td><textarea name="desc"></textarea></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Technician:</td>
                    <td><select name="tech" size="1">
                            <%
                                try
                                        {
                                        List<String> lst=backend.getAllTechsNames();
                                        for(String s : lst) {
                            %>
                            <option value="100">
                                <%
                                    out.print(s);
                                %>
                            </option>
                            <%
                                } 
                                        }
                                        catch(Exception e)
                                        {
                            %>
                            <option>
                                <%
                                    out.println("fdghjk");
                                %>
                            </option>
                            <%
                                }
                            %>
                    </select>&nbsp;</td>
                </tr>
                <tr>
                    <td><strong><u><span
                                style="color: rgb(255, 0, 0);">Caller Details:</span></u></strong></td>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>First name</td>
                    <td><input name="ClientFirst" type="text"
                        value="Your first name" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Last name</td>
                    <td><input name="ClientLast" type="text"
                        value="Your last name" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>Address</td>
                    <td><input name="ClientAddress" type="text"
                        value="Your address" /></td>
                </tr>
                <tr>
                    <td>&nbsp;</td>
                    <td>&nbsp;</td>
                    <td><input name="addCall" type="submit" value="Submit" /></td>
                </tr>
            </tbody>
        </table>
    </form>
</body>
</html>

还有最重要的: DBBackend代码:

package com.example.backend;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.TypedQuery;

import com.example.model.Call;
import com.example.model.CallStatus;
import com.example.model.SparePart;
import com.example.model.Technician;
import com.example.model.ThingToDo;

public class DBbackend implements Backend
{
    private EntityManagerFactory emf = null;
    private EntityManager em = null;
    private String PERSISTENCE_UNIT_NAME = "transactions-optional";

    //
    public DBbackend()
    {
        emf = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        em = emf.createEntityManager();
    }

    private void insert(Object obj) throws Exception
    {
        em.getTransaction().begin();
        em.persist(obj);
        try
        {
            em.getTransaction().commit();
        } catch (Exception e)
        {
            em.clear();
            throw e;
        }
    }

    @Override
    public int getNextCallId()
    {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public void removeCall(int id) throws Exception
    {
        // TODO Auto-generated method stub

    }

    @Override
    public ArrayList<Call> getCallsByTech(Technician t) throws Exception
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void updateCall(Call call) throws Exception
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void save()
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void addCall(Call call) throws Exception
    {
        // TODO Auto-generated method stub

    }

    @Override
    public void addTechnician(Technician technician) throws Exception
    {
        // TODO Auto-generated method stub
        insert(technician);
    }

    @Override
    public Technician getTechnicianByUserName(String userName) throws Exception
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Call getCall(int id) throws Exception
    {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void addCallToTech(Call call, Technician t) throws Exception
    {
        // TODO Auto-generated method stub
        call.setTechnician(t);
        insert(call);
    }

    @Override
    public Technician findTechByName(String name) throws Exception
    {
        // TODO Auto-generated method stub
        Query q = em.createQuery(
                "SELECT technician FROM Technician technician "
                        + "WHERE technician.name = :Name ", Technician.class);
        q.setParameter("Name", name);
        return (Technician) q.getSingleResult();
    }

    @SuppressWarnings("unchecked")
    @Override
    public List<String> getAllTechsNames() throws Exception
    {
        // TODO Auto-generated method stub
        TypedQuery<Technician> query =
                em.createQuery("SELECT p FROM Technician p", Technician.class);
            List<Technician> results = query.getResultList();
        List<String> nameList = new ArrayList<String>();
        for (Technician item : results)
            nameList.add(item.getName());

        return nameList;
    }

    @Override
    public ArrayList<String> blabla() throws Exception
    {
        // TODO Auto-generated method stub
        Query q = em.createQuery(
                "SELECT technician FROM Technician technician",
                Technician.class);
        @SuppressWarnings("unchecked")
        List<Technician> lst = q.getResultList();
        ArrayList<String> nameList = new ArrayList<String>();
        for (Technician item : lst)
            nameList.add(item.getName());
        return nameList;
    }

    @Override
    public int getTechnicianCurrentId()
    {
        // TODO Auto-generated method stub
        return Technician.getIdCount();
    }

    @Override
    public int getCallCurrentId()
    {
        // TODO Auto-generated method stub
        return Call.getIdCount();
    }

}

堆栈跟踪:

来源:com.google.appengine.datanucleus.query.QueryEntityPKFetchFieldManager.fetchIntField(QueryEntityPKFetchFieldManager.java:70) 类:com.google.appengine.datanucleus.query.QueryEntityPKFetchFieldManager 方法:fetchIntField 行:70来源:org.datanucleus.identity .IdentityUtils.getApplicationIdentityForResultSetRow(IdentityUtils.java:93) 类:org.datanucleus.identity.IdentityUtils 方法:getApplicationIdentityForResultSetRow 行:93Source:com.google.appengine.datanucleus.EntityUtils.entityToPojo(EntityUtils.java:1011) 类:com.google .appengine.datanucleus.EntityUtils 方法:entityToPojo 行:1011 来源:com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:229) 类:com.google.appengine.datanucleus.query.DatastoreQuery$2 方法:申请行:229来源:com.google.appengine.datanucleus.query.DatastoreQuery$2.apply(DatastoreQuery.java:226) 类:com.google.appengine.datanucleus.query.DatastoreQuery$2 方法:申请行:226来源:com.goog le.appengine.datanucleus.query.LazyResult.resolveNext(LazyResult.java:96) 类:com.google.appengine.datanucleus.query.LazyResult 方法:resolveNext 行:96Source:com.google.appengine.datanucleus.query.LazyResult。 resolveAll(LazyResult.java:121) 类:com.google.appengine.datanucleus.query.LazyResult 方法:resolveAll 行:121Source:com.google.appengine.datanucleus.query.LazyResult.size(LazyResult.java:115) 类: com.google.appengine.datanucleus.query.LazyResult 方法:size 行:115Source:com.google.appengine.datanucleus.query.StreamingQueryResult.size(StreamingQueryResult.java:151) 类:com.google.appengine.datanucleus.query。 StreamingQueryResult 方法:size 行:151Source:org.datanucleus.store.query.AbstractQueryResult.toArray(AbstractQueryResult.java:400) 类:org.datanucleus.store.query.AbstractQueryResult 方法:toArray 行:400Source:java.util.ArrayList。 addAll(ArrayList.java:530) 类:java.util.ArrayList 方法:addAll 行:530Source:org.datanucleus.query。 evaluator.JavaQueryEvaluator.execute(JavaQueryEvaluator.java:160) 类:org.datanucleus.query.evaluator.JavaQueryEvaluator 方法:执行行:160 来源:org.datanucleus.query.evaluator.JPQLEvaluator.execute(JPQLEvaluator.java:112) 类: org.datanucleus.query.evaluator.JPQLEvaluator 方法:执行行:112 来源:com.google.appengine.datanucleus.query.JPQLQuery.performExecute(JPQLQuery.java:200) 类:com.google.appengine.datanucleus.query.JPQLQuery 方法: performExecute Line: 200Source: org.datanucleus.store.query.Query.executeQuery(Query.java:1789) Class: org.datanucleus.store.query.Query Method: executeQuery Line: 1789Source: org.datanucleus.store.query。 Query.executeWithMap(Query.java:1693) 类:org.datanucleus.store.query.Query 方法:executeWithMap 行:1693Source:org.datanucleus.api.jpa.JPAQuery.getSingleResult(JPAQuery.java:232) 类:org. datanucleus.api.jpa.JPAQuery 方法:getSingleResult 行:232Source:com.example.backend.DBbackend.findTechByName(DBbackend.jav a:124) 类:com.example.backend.DBbackend 方法:findTechByName 行:124Source:com.example.backend.ServerBackend.findTechByName(ServerBackend.java:101) 类:com.example.backend.ServerBackend 方法:findTechByName 行: 101来源:org.apache.jsp.addCall_jsp._jspService(addCall_jsp.java:81) 类:org.apache.jsp.addCall_jsp 方法:_jspService 行:81来源:org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java: 97)类:org.apache.jasper.runtime.HttpJspBase 方法:服务行:97来源:javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 类:javax.servlet.http.HttpServlet 方法:服务行: 717来源:org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) 类:org.apache.jasper.servlet.JspServletWrapper 方法:服务行:377来源:org.apache.jasper.servlet.JspServlet.serviceJspFile( JspServlet.java:313) 类:org.apache.jasper.servlet.JspServlet 方法:serviceJspFile 行:313Source:org.apache.jasper.servlet.JspServle t.service(JspServlet.java:260) 类:org.apache.jasper.servlet.JspServlet 方法:服务行:260 来源:com.google.appengine.tools.development.PrivilegedJspServlet.access$101(PrivilegedJspServlet.java:23) 类:com.google.appengine.tools.development.PrivilegedJspServlet 方法:access$101 行:23 来源:com.google.appengine.tools.development.PrivilegedJspServlet$2.run(PrivilegedJspServlet.java:61) 类:com.google.appengine.tools .development.PrivilegedJspServlet$2 方法:运行行:61 来源:java.security.AccessController.doPrivileged(Native Method) 类:java.security.AccessController 方法:doPrivileged 行:-2 来源:com.google.appengine.tools.development.PrivilegedJspServlet。 service(PrivilegedJspServlet.java:58) 类:com.google.appengine.tools.development.PrivilegedJspServlet 方法:service 行:58Source:javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 类:javax.servlet。 http.HttpServlet 方法:service Line:717Source:org.mortbay.jetty.servlet.Servlet Holder.handle(ServletHolder.java:511) 类:org.mortbay.jetty.servlet.ServletHolder 方法:句柄行:511Source:org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 类: org.mortbay.jetty.servlet.ServletHandler$CachedChain 方法:doFilter 行:1166 来源:com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 类:com.google.appengine.api。 socket.dev.DevSocketFilter 方法:doFilter 行:74 来源:org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 类:org.mortbay.jetty.servlet.ServletHandler$CachedChain 方法:doFilter 行: 1157Source:com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:123) 类:com.google.appengine.tools.development.ResponseRewriterFilter 方法:doFilter 行:123Source:org.mortbay.jetty.servlet。 ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 类:org.mortbay.jetty.servlet.ServletHand ler$CachedChain 方法:doFilter 行:1157Source:com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 类:com.google.appengine.tools.development.HeaderVerificationFilter 方法:doFilter 行:34Source: org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 类:org.mortbay.jetty.servlet.ServletHandler$CachedChain 方法:doFilter 行:1157Source:com.google.appengine.api.blobstore。 dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) 类:com.google.appengine.api.blobstore.dev.ServeBlobFilter 方法:doFilter 行:63Source:org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler. java:1157) 类:org.mortbay.jetty.servlet.ServletHandler$CachedChain 方法:doFilter 行:1157Source:com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 类:com.google。 apphosting.utils.servlet.TransactionCleanupFilter 方法:doFilter行:43 来源:org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 类:org.mortbay.jetty.servlet.ServletHandler$CachedChain 方法:doFilter 行:1157 来源:com.google.appengine。 tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 类:com.google.appengine.tools.development.StaticFileFilter 方法:doFilter 行:125Source:org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler. java:1157) 类:org.mortbay.jetty.servlet.ServletHandler$CachedChain 方法:doFilter 行:1157Source:com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:368) 类:com.google。 appengine.tools.development.DevAppServerModulesFilter 方法:doDirectRequest 行:368 来源:com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:351) 类:com.google.appengine.tools.development.DevAppServerModulesFilter Met hod:doDirectModuleRequest 行:351Source:com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) 类:com.google.appengine.tools.development.DevAppServerModulesFilter 方法:doFilter 行:116Source:org.mortbay .jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 类:org.mortbay.jetty.servlet.ServletHandler$CachedChain 方法:doFilter 行:1157Source:org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler .java:388) 类:org.mortbay.jetty.servlet.ServletHandler 方法:handle 行:388Source:org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 类:org.mortbay.jetty.security .SecurityHandler 方法:handle Line:216Source:org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) Class:org.mortbay.jetty.servlet.SessionHandler 方法:handle Line:182Source:org.mortbay.jetty .handler.ContextHandler.handle(ContextHandler.java:765) 类:org.mortbay.j etty.handler.ContextHandler 方法:句柄行:765来源:org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 类:org.mortbay.jetty.webapp.WebAppContext 方法:句柄行:418来源:com. google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:97) 类:com.google.appengine.tools.development.DevAppEngineWebAppContext 方法:句柄行:97来源:org.mortbay.jetty.handler.HandlerWrapper.handle( HandlerWrapper.java:152) 类:org.mortbay.jetty.handler.HandlerWrapper 方法:handle 行:152Source:com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:485) 类:com. google.appengine.tools.development.JettyContainerService$ApiProxyHandler 方法:handle 行:485 来源:org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 类:org.mortbay.jetty.handler.HandlerWrapper 方法:handle行:152 来源:org.mortbay.jetty.Server.handle(Server.java: 326) 类:org.mortbay.jetty.Server 方法:handle 行:326Source:org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 类:org.mortbay.jetty.HttpConnection 方法:handleRequest 行:542Source: org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 类:org.mortbay.jetty.HttpConnection$RequestHandler 方法:headerComplete 行:923Source:org.mortbay.jetty.HttpParser.parseNext(HttpParser.java: 547) 类:org.mortbay.jetty.HttpParser 方法:parseNext 行:547Source:org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 类:org.mortbay.jetty.HttpParser 方法:parseAvailable 行:212Source: org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 类:org.mortbay.jetty.HttpConnection 方法:handle 行:404Source:org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)类:org.mortbay.io.nio.SelectChannelEndPoint 方法:运行行:409Source:org.mortbay.thread.QueuedThreadPoo l$PoolThread.run(QueuedThreadPool.java:582) 类:org.mortbay.thread.QueuedThreadPool$PoolThread 方法:运行行:582 }

我无法从中选择任何东西!!!

【问题讨论】:

  • 添加您的错误堆栈跟踪以诊断您的问题..
  • 只是一个建议:类名以大写开头,变量以小写开头。
  • 我已经添加了堆栈跟踪

标签: sql jsp jpa web-applications


【解决方案1】:

提示,当您有一个可能为空的变量时,将其用作参数,而不是调用该方法。

如果您使用 .运算符后一个为空的变量,你会得到空异常。例如:

 if(  variable_could_be_null.equals(variable_known_to_not_be_null) )

这最终会在某个时候给你一个空异常。但这不会:

 if(  variable_known_to_not_be_null.equals(variable_could_be_null) )

因为在这里你总是使用 .运算符与您知道的变量已定义。

在使用可能为 null 的值之前,请检查它:

if(variable_could_be_null!=null)
{
  ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    相关资源
    最近更新 更多