【问题标题】:how do i handle number format exception in java?我如何处理java中的数字格式异常?
【发布时间】:2014-04-03 05:16:31
【问题描述】:

我正在我的机器上运行一个简单的小程序。请注意,当小程序尝试运行时,执行小程序时会出现“数字格式异常”错误。 如下代码所示

import java.util.*;
import java.awt.*;
import java.applet.*;

<html>
<body>
<applet code="s09_03.class" width=400 height=400>
</applet>
</body>
</html>

public class s09_03 extends Applet
{
GregorianCalendar cal=new GregorianCalendar();
String s,s1,s2,s3,s4;
int a=0,b=0,c=0,d=0;
public void start(){s=getParameter("fg");
s1=getParameter("as");
s2=getParameter("as1");
s3=getParameter("as2");
s4=getParameter("as3");
a=Integer.parseInt(s1);
b=Integer.parseInt(s2);
c=Integer.parseInt(s3);
d=Integer.parseInt(s4);
}
public void init()
{
}
public void paint(Graphics g)
{
if(s.equals("red"))g.setColor(Color.red);g.drawRect(a,b,c,d);
g.drawString("Color = "+"",25,25);
g.drawString("Calendar is"+cal.DATE+"/"+cal.MONTH+"/"+cal.YEAR,34,36);
}
}

使用的命令是

javac s09_03.java
and
appletviewer s09_03.java

终端输出:

  java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:443)
    at java.lang.Integer.parseInt(Integer.java:514)
    at s09_03.start(s09_03.java:22)
    at sun.applet.AppletPanel.run(AppletPanel.java:477)
    at java.lang.Thread.run(Thread.java:701).

所以我的问题是为什么会出现这个错误,它通常在什么时候出现?还建议对代码进行一些必要的更改,以便代码运行时不会出现任何错误。请注意,代码是通过 linux 运行的...谢谢.. .

~

【问题讨论】:

  • 为什么会发生 - 您的参数(或多个参数)不能转换为 Integer。你如何解决它?始终将整数值传递给这些参数。
  • 1) 为什么要编写小程序?如果是由于规范。老师请发给Why CS teachers should stop teaching Java applets。 2) 为什么选择 AWT 而不是 Swing?请参阅我在 Swing extras over AWT 上的回答,有很多放弃使用 AWT 组件的充分理由。

标签: java applet init numberformatexception


【解决方案1】:

看看Try-CatchNumberFormatExceptionnullPointerException

使用try catch处理异常

试试这个,因为你得到的值是null。所以检查传递的值不应该为空

        try
        {
        a = Integer.parseInt(s1 != null ? s1 : "0");
        b = Integer.parseInt(s2 != null ? s2 : "0");
        c = Integer.parseInt(s3 != null ? s3 : "0");
        d = Integer.parseInt(s4 != null ? s4 : "0");
        }
        catch(NumberFormatException ex)
        {
            System.out.println("Exception : "+ex);
        }

还有变量s is also null,所以你得到了NullPointerException

if (s != null && s.equals("red"))

而不是

if (s.equals("red"))

【讨论】:

  • 嘿,我按照你说的尝试了..但是小程序无法运行..当代码执行时,它只会显示小程序查看器框,但里面没有内容..为什么会这样??? .任何对代码提出的建议都会被认可..
  • 嘿,代码运行成功,但是由于我在代码中使用 g.setColor(Color.red) 将颜色设置为红色,因此未绘制红色...我没有看到红色...它还显示错误的日历....任何更正你suugest它??
  • 更改日历值,例如 cal.get(cal.DATE) + "/" + cal.get(cal.MONTH) + "/" + cal.get(cal.YEAR) 因为 cal.get(cal.DATE) + "/" + cal.get(cal.MONTH) + "/" + cal.get(cal.YEAR) DATE 只返回常量值,月份和年份以此类推。使用 cal.get() 获取日期、月份和年份的值
  • 组件没有设置红色,因为s值为null,你在条件为真时分配红色,否则不会设置。
  • 嘿,谢谢您的建议....使用 cal.get() 对我有用。我可以对代码进行任何改进吗??有没有办法将颜色设置为红色? ?如果是怎么办??
【解决方案2】:

捕获异常并处理它

try{    
    a=Integer.parseInt(s1);
    b=Integer.parseInt(s2);
    c=Integer.parseInt(s3);
    d=Integer.parseInt(s4);
} catch(NumberFormatException e){
    //exceptionhandling
}

【讨论】:

  • 你需要在那里处理异常。通常e.printStackTrace() 显示发生了什么或您的自定义异常处理。自定义处理取决于用例
【解决方案3】:

只需在 catch 块中捕获异常并采取适当的措施。

try{
  // some code that may throw NumberFormatException 

}catch(NumberFormatException e){
  // when number format exception occur, take appropriate action
}

问题的根本原因:

As exception says clearly
  java.lang.NumberFormatException: null 
    at java.lang.Integer.parseInt(Integer.java:443)

您正试图将一个为空的字符串值解析为一个整数,这就是 parseInt() 抛出异常的原因。

【讨论】:

  • 如果你建议我应该在代码的catch块中写什么对我更有帮助??。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2015-02-19
  • 1970-01-01
  • 1970-01-01
  • 2010-12-26
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多