Исключение в потоке "AWT-EventQueue-1" java.lang.NumberFormatException - PullRequest
1 голос
/ 25 мая 2010

У меня проблема с моим апплетом. Он рисует только ОДИН ряд, прежде чем выдает ошибку.

Вот мой код: http://www.so.pastebin.com/RkG5YHVQ

Вот ошибка: http://www.so.pastebin.com/z1qWpFS6

Ответы [ 4 ]

1 голос
/ 25 мая 2010

Вот как вы начинаете отлаживать эту проблему:

Прочитайте трассировку стека снизу вверх и обратите внимание, где начинают появляться ваши исходные файлы 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.
1 голос
/ 25 мая 2010

Просто измените строку 38 на:

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

Это удалит все пробелы из числовой строки, которая вызывает ошибку в коде.

1 голос
/ 25 мая 2010

Похоже, что ваш сканер не использует пробелы в качестве разделителя, а Integer.parseInt(src.next()); задыхается от первой найденной строки.

Вы можете попробовать что-то вроде src.useDelimiter("[,\\s]+"), чтобы использовать любую группу из одного или нескольких пробелов и запятых в качестве разделителей.

1 голос
/ 25 мая 2010

Похоже, dan.txt содержит дополнительный символ новой строки перед нулем.

...