【问题标题】:NumberFormatException when trying to convert JTextField to int尝试将 JTextField 转换为 int 时出现 NumberFormatException
【发布时间】:2013-11-27 23:30:11
【问题描述】:

在我的这部分代码中,我正在创建 Dizionario 类的对象并将其写入文件,首先调用构造函数,接受 3 个参数(路径、字符串、整数)。 我从 3 个 JTextField 获取这 3 个参数,特别是最后一个(JTextField3)正在创建此错误,转换为 int

这是错误:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "javax.swing.JTextField[,62,11,302x28,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@9577f8b,flags=288,maximumSize=,minimumSize=,preferredSize=,caretColor=,disabledTextColor=DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145,editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=DerivedColor(color=255,255,255 parent=nimbusSelectedText offsets=0.0,0.0,0.0,0 pColor=255,255,255,selectionColor=DerivedColor(color=57,105,138 parent=nimbusSelectionBackground offsets=0.0,0.0,0.0,0 pColor=57,105,138,columns=0,columnWidth=0,command=,horizontalAlignment=LEADING]"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.<init>(Integer.java:677)

我尝试了这些代码将字符串转换为整数:

int i = new Integer(jTextField3.toString()); 

然后将i作为参数(或者直接调用new Integer(...)作为参数)

(int)JTextField3.toString();

Integer.ParseInt(JTextField3.toString());

这是我的方法

    private void CreateMouseClicked(java.awt.event.MouseEvent evt) {                                    
    Dizionario dic = new Dizionario(
            (Paths.get(jTextField2.toString())),
            jTextField1.toString(),
            Integer.parseInt(jTextField3.toString())); 
    dic.writeToFile();
}   

【问题讨论】:

  • “尝试将 JTextField 转换为 int 时出现 NumberFormatException” betterApproach = JSpinner + SpinnerNumberModel

标签: java swing


【解决方案1】:

嗯,不是jTextField3.toString(),是jTextField3.getText()。这是一个很大的区别,要查看 toString() 返回的内容,请查看您的错误消息。您正在尝试解析:

"javax.swing.JTextField[,62,11,302x28,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@9577f8b,flags=288,maximumSize=,minimumSize=,preferredSize=,caretColor=,disabledTextColor=DerivedColor(color=142,143,145 parent=nimbusDisabledText offsets=0.0,0.0,0.0,0 pColor=142,143,145,editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=DerivedColor(color=255,255,255 parent=nimbusSelectedText offsets=0.0,0.0,0.0,0 pColor=255,255,255,selectionColor=DerivedColor(color=57,105,138 parent=nimbusSelectionBackground offsets=0.0,0.0,0.0,0 pColor=57,105,138,columns=0,columnWidth=0,command=,horizontalAlignment=LEADING]"

变成一个数字。

【讨论】:

  • 但是为什么我的第一个和第二个参数没有报错呢?
  • @maxpesa 为什么要这样做? getTexttoString 都返回 String,就编译器而言,它们是该方法的正确选项......编译器无法猜测调用的结果可能是什么......
  • @maxpesa:因为它们是字符串。您应该测试您在 println 语句中获得的字符串,以便自己查看。
【解决方案2】:

不要使用JTextField#toString,使用JTextField#getText返回文本字段的文本内容,例如...

int i = new Integer(jTextField3.getText());

toString 通常用于提供有关Object 的有用诊断信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2016-10-27
    • 2018-09-18
    • 1970-01-01
    相关资源
    最近更新 更多