【问题标题】:leave a blank jtextfield field in java在java中留下一个空白的jtextfield字段
【发布时间】:2019-12-30 01:06:44
【问题描述】:

我有这个错误:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
    at Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:592)
    at java.lang.Integer.parseInt(Integer.java:615)
    at sunat.calculadora.btnCalcularActionPerformed(calculadora.java:234)
    at sunat.calculadora.access$100(calculadora.java:14)
    at sunat.calculadora$2.actionPerformed(calculadora.java:109)
    at 

我的代码:

private void btnCalcularActionPerformed(java.awt.event.ActionEvent evt) {                                            
 int sueldo,gratificaciones;
 int renumeracion_bruta_anual;
 int horas_extras,meses_pendientes;
 int renumeracion_neta_anual;
 double  impuesto_anual_proyectado;
 int asignacion_familiar;

 horas_extras=0;

 sueldo=Integer.parseInt(txtsueldo.getText());
 horas_extras = Integer.parseInt(txthorasextras.getText());



 meses_pendientes=Integer.parseInt(txtmesespendientes.getText());
 gratificaciones=Integer.parseInt(txtgratificacion.getText());
 asignacion_familiar=Integer.parseInt(txtasignacionfamiliar.getText());



 renumeracion_bruta_anual=sueldo*meses_pendientes+gratificaciones+horas_extras+asignacion_familiar;
 renumeracion_neta_anual=renumeracion_bruta_anual-29400;





 if (renumeracion_neta_anual<1){
       JOptionPane.showMessageDialog (null, "Usted no paga impuesto");
       }

 if (renumeracion_neta_anual <= 21000 && renumeracion_neta_anual>=1) {

 impuesto_anual_proyectado=renumeracion_neta_anual*0.08;
 txtcalculo.setText(String.format("%.2f", impuesto_anual_proyectado));

 } else if (renumeracion_neta_anual > 21000 && renumeracion_neta_anual<=84000) {
 impuesto_anual_proyectado=renumeracion_neta_anual *0.14;
  txtcalculo.setText(String.format("%.2f", impuesto_anual_proyectado));
 } else if (renumeracion_neta_anual > 84000 && renumeracion_neta_anual<=147000) {
 impuesto_anual_proyectado=renumeracion_neta_anual *0.17;
 txtcalculo.setText(String.format("%.2f", impuesto_anual_proyectado));
 } else if (renumeracion_neta_anual >147000 && renumeracion_neta_anual<=18900) {

 impuesto_anual_proyectado=renumeracion_neta_anual *0.20;
 txtcalculo.setText(String.format("%.2f", impuesto_anual_proyectado));
 } else if (renumeracion_neta_anual >18900) {
 impuesto_anual_proyectado=renumeracion_neta_anual *0.30;
 txtcalculo.setText(String.format("%.2f", impuesto_anual_proyectado));



 }         

} 

正如您所见,字段 hours_extras 被声明为整数,但此时将字段 hours_extras 保留为空,它变为字符串,并且不执行给出上述错误的数学运算。有一些方法可以放手而不在 jtexfield 中写任何东西 因为我必须将该字段留空并在不需要时计算没有它的最终金额。谢谢你的回答。

【问题讨论】:

    标签: java swing jframe jtextfield numberformatexception


    【解决方案1】:

    如果您必须将空字符串作为特殊情况处理,并且希望乱码输入仍然引发异常,则可以执行以下操作:

    String extraHourString = txthorasextras.getText();
    if(extraHourString.isEmpty()) { //alternatively, if(extraHourString.equals("")) {
        ... //handle the text being empty, or set a boolean flag so that you can handle it later
    }
    else { // we know the provided text is not empty now
        //will still crash on gibberish inputs, but the empty string "" will never reach here
        horas_extras = Integer.parseInt(extraHourString);
    }
    

    或者,如果您想完全忽略空字符串(将 horas_extras 保留为默认值),您可以执行以下操作:

    int horas_extras = DEFAULT_VALUE; //declaration sets the default (could be any integer)
    ...
    if(!txthorasextras.getText().equals("")) { //or, if(!txthorasextras.getText().isEmpty()) {
        horas_extras = Integer.parseInt(txthorasextras.getText());
    }
    

    如果输入字符串为空,这将忽略对horas_extras 的赋值,这会将其保留为horas_extras (DEFAULT_VALUE) 的当前值。请注意,乱码输入仍会像以前一样抛出异常。

    【讨论】:

    • 另外,别忘了打电话给.trim(),就像if (myString != null &amp;&amp; myString.trim().isEmpty()) {一样
    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2021-07-14
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多