我的applet有这个问题。它只会在产生错误之前绘制一行。
答案 0 :(得分:1)
看起来dan.txt
在零之前包含额外的换行符。
答案 1 :(得分:1)
只需将第38
行更改为:
int line = Integer.parseInt(src.next().trim());
这将修剪导致代码中出错的数字字符串中的任何空格。
答案 2 :(得分:1)
看起来你的扫描仪没有使用空格作为分隔符,Integer.parseInt(src.next());
在它找到的第一个换行符上窒息。
您可以尝试src.useDelimiter("[,\\s]+")
之类的内容,将一个或多个空格和逗号字符的任意分组用作分隔符。
答案 3 :(得分: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.