- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下内容,我必须在其中编写一个 servlet,该 servlet 需要年龄、婚姻状况、家庭收入和 child 数量,输出到数据库,然后将更新后的平均值返回给用户。但是,我遇到了这个堆栈跟踪:
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)
这到底是什么意思?我想我得到了一个 NullPointerException
,但我看不到在哪里。这是我的程序:
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("<html>\n"+
"<head><title>Thanks!</title></head>"+
"<body style='background:cyan;'>"+
" <h1 style='text-align:center'>RRC BIT Department - Household Survey</h1>"+
" <hr><br/>"+
" <h2 style='text-align:center'>Up to Date Survey Results</h2>"+
" <h4 style='margin-left:200px'>Average Age: "+form.format(results.getAvgAge())+"</h4>"+
" <h4 style='margin-left:200px'>Average Number of Children: "+form.format(results.getAvgKids())+"</h4>"+
" <h4 style='margin-left:200px'>Average Number of Married Respondents: "+form.format(results.getTotalMarried())+"</h4>"+
" <h4 style='margin-left:200px'>Average Number of Single Respondents: "+form.format(results.getTotalSingle())+"</h4>"+
" <h4 style='margin-left:200px'>Average Income: "+form.format(results.getAvgIncome())+"</h4></body>");
}
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();}
}
}
最初在我的 HTML 输出中,我不小心有一行
"Average Number of Married Respondents: "+form.format(results.getTotalMarried())+"</h4>"
作为
"Average Number of Married Respondents: "+form.format(results.getAvgKids())+"</h4>"
而且效果很好。然后我将它切换到前者以获得 totalMarried,现在它给了我异常(exception)。问题出在哪里?
提前致谢。
最佳答案
我将其添加为单独的答案,因为这是完全不同的思路。如果编辑更好,请告诉我,我会删除重复的。
看起来您将在读取结果对象时抛出 IOException
。原因是,您尝试序列化的类不可序列化。由于 SurveyResults
是一个内部类,要序列化它也必须序列化包含类(在本例中为您的 Servlet)。我建议将您的类更改为静态嵌套类,或者可能是默认作用域的顶级类。 (根据需要更改方法访问级别。)
您可能还需要删除您的调查结果数据文件并重新开始。在我的测试中,它引用了不可序列化的类,在删除它之前我无法让代码运行。
关于抛出 servlet 和堆栈跟踪的 Java 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710099/
来自 java docs 公共(public) FileWriter(String fileName) 抛出 IOException 抛出: IOException - 如果指定的文件存在但它是目录而
我使用以下代码将我的 .net 客户端(基于 CQL)连接到 3 节点 Cassandra 集群。我以 30 条记录/秒的速度(从 RabbitMQ)获取数据,并且它们顺利地存储在 cassandra
如果在读取文件时缺少字段,我应该捕获 NoSuchElementException。如果缺少一个字段,我只需要跳到文件的下一行。我的问题是,我在哪里实现我的 try/catch 代码来做到这一点?这是
我正在尝试使用 ASP.NET MVC 实现 OpeinID 登录。我正在尝试按照 http://blog.nerdbank.net/2008/04/add-openid-login-support-
学习使用 Java 进行 xml 解析,并且正在编写一个测试程序来尝试各种东西。所有测试 System.out.println() 都是我在控制台中所期望的,除了 childElement 返回 [n
我正在尝试使用 SwingUtilities 创建 JFrame Thread tt = new Thread(new Runnable() { public void run
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我写了这段代码: MethodInfo method2 = typeof(IntPtr).GetMethod( "op_Explicit", Bind
我开始学习 Java,并且正在根据书本做一些练习。在执行此操作时,我遇到了以下错误:线程“main”java.util.InputMismatchException 中出现异常。我正在编写一个简单的程
我有一个文本文件,其中前两行是整数 m 和 n,然后有 m 行,每行都有 n 管道分隔值。我编写了一个程序,读取文件并使用文件中的值创建 m*n 数组,它工作了无数次,然后突然,使用相同的代码,使用相
所以我尝试使用在另一个类中生成的 bean 以在主应用程序中使用 package com.simon.spring.basics.properties; import org.spri
我还没有完成这个应用程序,但我希望在我的手机上看到它的样子。但是,它会强制关闭并引发 InstantiationException。 logcat 异常: 09-19 20:13:47.987: D/
我想从 UIViewController 加载一个基于 SwiftUI 的 View ,该 View 读取包本地的 json。仅 swiftUI 项目中的代码和绑定(bind)工作正常,当我利用 UI
'java.net.SocketTimeoutException:连接超时' 循环一段时间后我收到此错误。为什么我会收到 SocketTimeoutException?我该如何修复这个错误? @Ove
当有 null 值时抛出 ArgumentNullException() 是个好主意吗? This thread 没有提到在 null 上抛出的最明显的异常。 谢谢 最佳答案 ArgumentNull
我得到这个异常: NullReferenceException Object reference not set to an instance of an object at Namespace
所以其中一个方法的描述如下: public BasicLinkedList addToFront(T data) This operation is invalid for a sorted list
我正在使用 Intellij Idea,当我去生成 JavaDocs(通过工具 -> 生成 JavaDoc)时,我抛出了一个 IllegealArgumentException,没有关于发生了什么问题
我正在学习 C++ 中的互斥锁,但以下代码(摘自 N. Josuttis 的“C++ 标准库”)有问题。 我不明白为什么它会阻塞/抛出除非我在主线程中添加this_thread::sleep_for(
我正在试验 JavaFX 标签和组,通过鼠标拖动将它们移动到屏幕上。新节点从一些线程添加到动画组。但是,有时我会突然看到以下异常 - 我假设,当某些节点重叠时。但是不知道是什么问题……因为不涉及我的代
我是一名优秀的程序员,十分优秀!