1

我的小程序有这个问题。它只在产生错误之前绘制一行。

这是我的代码: http: //www.so.pastebin.com/RkG5YHVQ

这是错误: http: //www.so.pastebin.com/z1qWpFS6

4

4 回答 4

1

看起来像dan.txt在零之前包含一个额外的换行符。

于 2010-05-25T01:36:09.960 回答
1

只需将行更改38为:

int line = Integer.parseInt(src.next().trim());

这将从导致代码错误的数字字符串中删除任何空格。

于 2010-05-25T01:40:07.897 回答
1

看起来您的扫描仪没有使用空格作为分隔符,并且Integer.parseInt(src.next());在它找到的第一个换行符上窒息。

您可以尝试src.useDelimiter("[,\\s]+")使用一个或多个空格和逗号字符的任何分组作为分隔符。

于 2010-05-25T01:40:13.197 回答
1

以下是您开始调试此问题的方法:

自下而上通读堆栈跟踪,注意您的 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.
于 2010-05-25T01:40:44.430 回答