Note that there are some explanatory texts on larger screens.

plurals
  1. POJava problem with servlet and stacktrace thrown
    primarykey
    data
    text
    <p>I have the following in which I have to write a servlet that takes an age, marital status, house income and number of kids, goes out to a DB, and then returns the updated averages to the user. However, I am encountering this stacktrace:</p> <pre><code>java.lang.NullPointerException at HouseSurvey$SurveyResults.access$200(HouseSurvey.java:86) at HouseSurvey.doPost(HouseSurvey.java:43) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419) at org.apache.catalina.servlets.InvokerServlet.doPost(InvokerServlet.java:169) at javax.servlet.http.HttpServlet.service(HttpServlet.java:709) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) </code></pre> <p>What the heck does this all mean? I figure I am getting a <code>NullPointerException</code>, but I don't see where. Here is my prog.:</p> <pre><code>import java.text.DecimalFormat; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HouseSurvey extends HttpServlet { private final static String SURVEY_FILE = "HouseSurvey.dat"; SurveyResults results; Household h; DecimalFormat form = new DecimalFormat("#,###,#00.00"); public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); //make a printwriter to print the page File survey = new File(SURVEY_FILE); if(!survey.exists()) //check to see if the file exists results = new SurveyResults(); else { //If the file exists, read it the latest survey tallies try { ObjectInputStream ips = new ObjectInputStream(new FileInputStream(survey)); results = (SurveyResults)ips.readObject(); //read the file into 'results' ips.close(); //close the input stream } catch(ClassNotFoundException e) {e.printStackTrace();} catch(FileNotFoundException f) {f.printStackTrace();} catch(IOException ioe) {ioe.printStackTrace();} } int ageValue = Integer.parseInt(request.getParameter("age")), childValue = Integer.parseInt(request.getParameter("children")); double incomeValue = Double.parseDouble(request.getParameter("income")); Boolean marriedValue = true; if (request.getParameter("status").equals("married")) marriedValue = true; else if(request.getParameter("status").equals("single")) marriedValue = false; Household h = new Household(ageValue,childValue,incomeValue,marriedValue); results.totalResults(h); //Write results to disk. try { ObjectOutputStream ops = new ObjectOutputStream(new FileOutputStream(survey)); ops.writeObject(results); ops.flush(); ops.close(); } catch(IOException ioe) {ioe.printStackTrace();} response.setContentType("text/html"); //contnent type for the responding webpage out.println("&lt;html&gt;\n"+ "&lt;head&gt;&lt;title&gt;Thanks!&lt;/title&gt;&lt;/head&gt;"+ "&lt;body style='background:cyan;'&gt;"+ " &lt;h1 style='text-align:center'&gt;RRC BIT Department - Household Survey&lt;/h1&gt;"+ " &lt;hr&gt;&lt;br/&gt;"+ " &lt;h2 style='text-align:center'&gt;Up to Date Survey Results&lt;/h2&gt;"+ " &lt;h4 style='margin-left:200px'&gt;Average Age: "+form.format(results.getAvgAge())+"&lt;/h4&gt;"+ " &lt;h4 style='margin-left:200px'&gt;Average Number of Children: "+form.format(results.getAvgKids())+"&lt;/h4&gt;"+ " &lt;h4 style='margin-left:200px'&gt;Average Number of Married Respondents: "+form.format(results.getTotalMarried())+"&lt;/h4&gt;"+ " &lt;h4 style='margin-left:200px'&gt;Average Number of Single Respondents: "+form.format(results.getTotalSingle())+"&lt;/h4&gt;"+ " &lt;h4 style='margin-left:200px'&gt;Average Income: "+form.format(results.getAvgIncome())+"&lt;/h4&gt;&lt;/body&gt;"); } private class Household { private int age, children; private double income; private boolean married=false; /**Method: Household * Constructor * @ param age - age of person surveyed:int * @ param children - number of children person surveyed has:int * @ param married - true or false, used to determine married or single:boolean * @ param income - the family income of the person surveyed:double */ private Household(int age, int children, double income, boolean married) { this.age=age; this.children=children; this.income=income; this.married=married; } //Getters private int getAge() {return age;} private int getChildren() {return children;} private double getIncome() {return income;} private boolean getMarried() {return married;} } private class SurveyResults implements Serializable { private double totalAge, totalChildren, totalMarried, totalSingle, totalIncome; /**Method: SurveyResults * Used for totals * @ param h - Household object created above:Household */ private void totalResults(Household h) { totalAge += h.getAge(); totalChildren += h.getChildren(); totalIncome += h.getIncome(); if(h.getMarried()) totalMarried += 1; else totalSingle += 1; } private double getTotalHouseholds() {return totalSingle + totalMarried;} private double getAvgAge() {return totalAge/getTotalHouseholds();} private double getAvgKids() {return totalChildren/getTotalHouseholds();} private double getTotalMarried() {return totalMarried;} private double getTotalSingle() {return totalSingle;} private double getAvgIncome() {return totalIncome/getTotalHouseholds();} } } </code></pre> <p>Originally in my HTML output, I accidentally had the line</p> <pre><code>"Average Number of Married Respondents: "+form.format(results.getTotalMarried())+"&lt;/h4&gt;" </code></pre> <p>as</p> <pre><code>"Average Number of Married Respondents: "+form.format(results.getAvgKids())+"&lt;/h4&gt;" </code></pre> <p>and that worked fine. Then I switched it to the former to get the totalMarried, and now it is giving me the exception. Where is the issue?</p> <p>Thanks in advance.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload