在运行毕设项目的时候,报出 java.lang.NumberFormatException: empty String错误。
1、错误详情如下:
严重: 在路径为[/CPMS]的上下文中,servlet[loginServlet]的Servlet.service()引发异常
java.lang.NumberFormatException: empty String
at java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at java.base/jdk.internal.math.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.base/java.lang.Double.parseDouble(Double.java:651)
at com.cc.cpms.controller.LoginServlet.doPost(LoginServlet.java:45)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:515)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:583)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:212)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:181)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:156)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:682)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:617)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:932)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1695)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.base/java.lang.Thread.run(Thread.java:833)
2、错误的代码行:
// 通过传来的经纬度值计算最短距离
Double longitude = Double.parseDouble(req.getParameter("longitude"));
Double latitude = Double.parseDouble(req.getParameter("latitude"));
通过以上代码段可以看出,我这里使用了强转,将获取的精度和纬度强制转换成了double类型,然后项目在运行时,并没有获取到精度和纬度。
//获取当前的位置
navigator.geolocation.getCurrentPosition(showPosition);
//获取当前位置的经纬度
function showPosition(position) {
var longitude = position.coords.longitude.toFixed(6);
var latitude = position.coords.latitude.toFixed(6);
console.log("Latitude: " + latitude);
console.log("Longitude: " + longitude);
/* 将经纬度数据传给input标签 */
$("#longitude").val(longitude);
$("#latitude").val(latitude);
}
如上面的代码段,正常运行时会在控制台会输出当前电脑所处的精度和维度,现在可以看到控制台是没有正常输出经纬度信息的。
并且控制台提示了TypeError,那么问题的原因就很显而易见了,就是项目在运行的时候没有获得经纬度信息,从而导致longitude和latitude两个变量是null,于是就有了empty String 的报错。
怀疑是函数没有调用成功,写几行控制台输出检查一下:
<script>
console.log("获取当前位置");
//获取当前的位置
navigator.geolocation.getCurrentPosition(showPosition);
console.log("加载getCurrentPosition方法结束!");
//获取当前位置的经纬度
function showPosition(position) {
console.log("进入showPosition函数!");
var longitude = position.coords.longitude.toFixed(6);
var latitude = position.coords.latitude.toFixed(6);
console.log("Latitude: " + latitude);
console.log("Longitude: " + longitude);
//将经纬度数据传给input标签
$("#longitude").val(longitude);
$("#latitude").val(latitude);
}
</script>
运行!
好样的!果然是函数showPosition没有被调用。
好奇的我,终于想到了查看操文档。
操作文档介绍如下:
原来我一直用的都是默认的http协议,http协议不支持navigator.geolocation。
这么个小问题,卡了我快一个上午了。。。
3、解决方法
换成https协议。