我有这个堆栈跟踪(部分)
Servlet.service() for servlet action threw exception java.lang.NumberFormatException: For input string: "37648" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Long.parseLong(Long.java:403) at java.lang.Long.valueOf(Long.java:482) at java.lang.Long.decode(Long.java:593)
在我的一个日志文件中
我不知道是什么是真正的输入字符串.
但是用户发生了同样的堆栈跟踪.
这样的堆栈跟踪如何发生?
解决方法
可能是因为他们的投入领先于零.
这运行正常:
public class DecodeLong { public static final void main(String[] params) { long l; l = Long.decode("37648"); System.out.println("l = " + l); } }
但是如果你改变这个:
l = Long.decode("37648");
到这个:
l = Long.decode("037648");
…它变为无效的八进制,并且Long.parseLong的异常不包括前导零:
Exception in thread "main" java.lang.NumberFormatException: For input string: "37648" at java.lang.NumberFormatException.forInputString(Unknown Source) at java.lang.Long.parseLong(Unknown Source) at java.lang.Long.valueOf(Unknown Source) at java.lang.Long.decode(Unknown Source) at DecodeLong.main(DecodeLong.java:24)
它不包括它,因为解码调用parseLong没有零,但是基数设置为8.
谈论模糊:-)所以如果你通过显示实际的输入来更新你的程序来处理异常,你可能会发现它是沿着这些方向的.