2014-09-17 2 views
-1

Я заметил странную проблему с моей программой, которую я просто не могу понять. Я включил метод, который был отмечен, и Ошибка, которая была указана. Меня смущает то, что я дублировал этот метод примерно 40 раз на других кнопках, меняя только «engtf4» на другой источник, где это необходимо. Они отлично работают без ошибок, но все же написаны точно так же. Добавляя дальнейшую путаницу, метод выполняется точно так, как предполагалось (хотя приведено ниже сообщение об ошибке)?Проблемы с NumberFormatException

Я просмотрел сеть для подобных проблем, используя ключевые слова - java.lang.NumberFormatException: Для ввода строки: «", однако я заметил, что все примеры сайтов, которые я видел, ссылались на конкретное значение в qoute-маркерах. Например, - java.lang.NumberFormatException: для строки ввода: «2345». Я был бы признателен за любую помощь, которую я мог бы получить, спасибо.

МЕТОД ИСХОДНЫЙ КОД:

if (a.getSource() == engBuy4){ 
    getItems(); 
q = engtf4.getText(); 
qq = Long.parseLong(q); //////////// LINE 13086 

if (qq > 1000000 || total > 1000000){ 
    Error.setText("You can ship a maximum of 1 million items."); 
    engtf4.setText(""); 
} 
if (qq <= 1000000 && total <= 1000000){ 
    if (qq > rem){ 
    Error.setText("You can ship " + rem + " more items"); 
    engtf4.setText("");    
} 
if (qq <= rem){ 
    buyShrEng(); 
    engtf4.setText("");    
} 
} 

ОШИБКА СООБЩЕНИЕ:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "" 
    at java.lang.NumberFormatException.forInputString(Unknown Source) 
    at java.lang.Long.parseLong(Unknown Source) 
    at java.lang.Long.parseLong(Unknown Source) 
    at DopeWars.DopeWars.mouseReleased(DopeWars.java:13086) 
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source) 
    at java.awt.Component.processMouseEvent(Unknown Source) 
    at javax.swing.JComponent.processMouseEvent(Unknown Source) 
    at java.awt.Component.processEvent(Unknown Source) 
    at java.awt.Container.processEvent(Unknown Source) 
    at java.awt.Component.dispatchEventImpl(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
    at java.awt.Container.dispatchEventImpl(Unknown Source) 
    at java.awt.Window.dispatchEventImpl(Unknown Source) 
    at java.awt.Component.dispatchEvent(Unknown Source) 
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
    at java.awt.EventQueue.access$200(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.awt.EventQueue$3.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.awt.EventQueue$4.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 
+0

Что вы д? Откуда вы это взяли? Пожалуйста, сообщите о возможной стоимости q – Nabin

+9

'LINE 13086' - серьезно? –

+4

«Я дублировал этот метод примерно 40 раз на других кнопках, меняя только« engtf4 »на другой источник, где это необходимо» - вы можете начать с реорганизации своего кода. Это может облегчить отладку. – stuXnet

ответ

2

Long.parseLong() бросает NumberFormatException, если переданная строка не интерпретируемое долго значение. В вашем случае вы передаете пустую строку (вероятно, потому, что пользователь ничего не вводил в поле ввода). Вы можете проверить это легко:

... 
Long.parseLong(""); 
... 
java.lang.NumberFormatException: For input string: "" 

Вы всегда должны быть готовы поймать это исключение (помимо пустых строк, то исключение, если пользователь вводит ничего, который не является Long), и показать соответствующее сообщение об ошибке пользователю, что-то вроде

try { 
    qq = Long.parseLong(q); 
} catch(NumberFormatException nfe) { 
    // show error message like "The string ... you entered is not a number." 
    ... 
} 

Если вы хотите, чтобы рассматривать пустую строку 0 (если это разумным для использования случай), вы можете сделать что-то вроде (по-прежнему требует try/catch блок, чтобы поймать любые другие недействительные входы):

try { 
    long qq = 0; 
    if (q != null && !q.isEmpty()) { 
     qq = Long.parseLong(q); 
    } 

    ... 

} catch(NumberFormatException nfe) { 
    // show error message like "The string ... you entered is not a number." 
    ... 
} 

В дополнение к этому, вместо того, чтобы дублировать код в десятки раз, вы должны проверить, какие являются переменными частями вашего кода и заменяют их переменными, поэтому вы можете повторно использовать код, а не дублировать его.

+0

Для метода выполнить правильно, должно быть передано значение. Не сомневаясь в своем solutiin, я думал, что мой код должен работать. Оказывается, что это не проблема, причина, по которой она вызвала ошибку, была связана с тем, что мой mouselistener был направлен на другую кнопку полностью. Ярким примером того, почему так много кода в одном месте плохо, я бы увидел, что гораздо проще, если бы я не закодировал столько строк. Все равно, спасибо за помощь. – dazbrad

2

Он поднимает NumberFormatException, поскольку аргумент, переданный методу parse(), не является разборным. Я хочу сказать, что вход здесь недействителен.

заказ на следующую ссылку :) http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html

1

кажется, что введенное значение является пустой строкой: java.lang.NumberFormatException: Для ввода строки: «»
Так перед разбором долго вы должны проверить, если строковое значение пусто или нет. В любом случае вы должны поймать java.lang.NumberFormatException, чтобы поместить значение по умолчанию, если синтаксический анализ не удался

1

Мы не можем разобрать пустое пространство или значение null до long.If мы попробуем это, возникнет исключение номера. , поэтому перед разбором добавьте оператор if для проверки наличия или отсутствия значения.

if(q!=null && !"".equals(q)) 
qq=Long.parse(q); 

Это хорошо использовать обработку исключений в таких ситуациях