我的小程序有这个问题。它只在产生错误之前绘制一行。
这是我的代码: http: //www.so.pastebin.com/RkG5YHVQ
这是错误: http: //www.so.pastebin.com/z1qWpFS6
我的小程序有这个问题。它只在产生错误之前绘制一行。
这是我的代码: http: //www.so.pastebin.com/RkG5YHVQ
这是错误: http: //www.so.pastebin.com/z1qWpFS6
看起来像dan.txt
在零之前包含一个额外的换行符。
只需将行更改38
为:
int line = Integer.parseInt(src.next().trim());
这将从导致代码错误的数字字符串中删除任何空格。
看起来您的扫描仪没有使用空格作为分隔符,并且Integer.parseInt(src.next());
在它找到的第一个换行符上窒息。
您可以尝试src.useDelimiter("[,\\s]+")
使用一个或多个空格和逗号字符的任何分组作为分隔符。
以下是您开始调试此问题的方法:
自下而上通读堆栈跟踪,注意您的 Java 源文件开始出现的位置。在你的情况下:
Inventory.paint(Inventory.java:51)
现在您可以使用几种不同的方法开始调试此行。首选的方法是将调试器附加到程序的运行实例上,然后查看在这一行发生了什么。如果您不能这样做,只需添加一个 try catch 块来捕获该代码行周围的异常并打印出实际值与预期值。
Exception in thread "AWT-EventQueue-1" java.lang.NumberFormatException: For inpu
t string: "
0"
at java.lang.NumberFormatException.forInputString(NumberFormatException.
java:48)
at java.lang.Integer.parseInt(Integer.java:449)
Tile0 at java.lang.Integer.parseInt(Integer.java:499)
at Inventory.paint(Inventory.java:51) <===== Your code shows up!
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:306)
at java.awt.Component.dispatchEventImpl(Component.java:4706)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4460)
Row: 1 successfully painted.