Java NumberFormatException的问题

Java NumberFormatException的问题,java,string,parsing,jlabel,numberformatexception,Java,String,Parsing,Jlabel,Numberformatexception,我注意到我的程序有一个奇怪的问题,我就是想不出来。我已经包括了被标记的方法和给出的错误。让我困惑的是,我在其他按钮上复制了这个方法大约40次,只在需要的地方将“engtf4”更改为另一个源。它们可以完美地工作,没有错误,但是写得完全一样。更令人困惑的是,该方法完全按照预期执行(即使给出了下面的错误消息) 我已经在网上搜索过类似的问题,使用关键字-java.lang.NumberFormatException:作为输入字符串:“”,但是我注意到我看到的所有示例站点都引用了qoute标记中的特定值。

我注意到我的程序有一个奇怪的问题,我就是想不出来。我已经包括了被标记的方法和给出的错误。让我困惑的是,我在其他按钮上复制了这个方法大约40次,只在需要的地方将“engtf4”更改为另一个源。它们可以完美地工作,没有错误,但是写得完全一样。更令人困惑的是,该方法完全按照预期执行(即使给出了下面的错误消息)

我已经在网上搜索过类似的问题,使用关键字-
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("");             
}
}
如果传递的字符串不是可解析的长值,则引发
NumberFormatException
。在本例中,您传递的是一个空字符串(可能是因为用户没有在输入字段中输入任何内容)。您可以很容易地验证这一点:

...
Long.parseLong("");
...
您应该随时准备捕获此异常(除了空字符串外,如果用户输入了任何非
长的
项,则会引发异常),并向用户显示适当的错误消息,如

try {
    qq = Long.parseLong(q);
} catch(NumberFormatException nfe) {
    // show error message like "The string ... you entered is not a number."
    ...
}
如果要将空字符串视为
0
(如果这对于您的用例来说是合理的),可以执行以下操作(仍然需要
try/catch
块来捕获任何其他无效输入):


除此之外,与其重复代码几十次,不如检查哪些是代码的可变部分,并用变量替换它们,这样您就可以重用代码而不是重复代码。

这会引发NumberFormatException,因为传递给parse()方法的参数是不可解析的。我的意思是,这里的输入是无效的

签出以下链接:)

输入的值似乎是一个空字符串:java.lang.NumberFormatException:对于输入字符串:“
因此,在解析为long之前,应该测试字符串值是否为空。
无论如何,如果解析不成功,您应该捕获java.lang.NumberFormatException以放入默认值。我们无法将空格或null解析为long。如果我们尝试这样做,则会出现数字格式异常。 因此,在解析之前,请添加if语句以检查值是否存在

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

在这些情况下使用异常处理是很好的

第13086行
-认真地说?“我在其他按钮上复制了大约40次这个方法,只在需要时将“engtf4”更改为另一个源代码”-您可以从重构代码开始。它可以使调试更容易。好吧,读取错误,很明显q被设置为空字符串。所以很难把它转换成一个数字。@stuXnet,我用一部旧手机作为上网的来源,用这部手机传输数据不是很方便。如果我在下面的例子中运气不好,我会找一个朋友,如果他们在家,我会用他们的电脑。无论如何,谢谢你的选择,非常感谢。我没想到会有这么多响应,谢谢各位。请参阅,要正确执行该方法,必须传递一个值。我不怀疑你的解决方案,我认为我的代码必须起作用。结果证明这不是问题所在,它引发错误的原因是我的鼠标听筒完全指向了另一个按钮。一个清楚的例子说明了为什么在一个地方有这么多的代码是一件坏事,如果我没有编写这么多行代码,我会发现这会容易得多。无论如何,谢谢你的帮助。
try {
    qq = Long.parseLong(q);
} catch(NumberFormatException nfe) {
    // show error message like "The string ... you entered is not a number."
    ...
}
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."
    ...
}
if(q!=null && !"".equals(q))
qq=Long.parse(q);