2011-01-05 12 views
1

这是我用简短的示例代码问题:如何为Java中的(JOptionPane.showInputDialog)中的(“取消”)按钮指定一个分类动作?

double num = 0.00; 

try 
{ 
    num = Double.parseDouble(JOptionPane.showInputDialog("Enter your num:")); 

} 

catch (Exception e) 
{ 
    System.err.println("Error: Invalid Input!"); 
    JOptionPane.showMessageDialog(null, "Error: Invalid Input!", 
    "Error", JOptionPane.ERROR_MESSAGE); 
} 

//Validate the num 

if (num > 0.0 && num <= 1000.00) 
{ 
    functionA(); 
} 

else if (deposit <= 0.0 || deposit > 1000.00) 
{ 
System.err.println("Error: out of range"); 
} 

*与上面的代码的问题是,当我点击“取消”按钮,程序更是创下两个错误:(超出范围和无效输入)。

请问我能解决这个问题吗?

在此先感谢

回答

4

首先,你需要验证,如果输入为空。如果没有,那么你使用parseDouble。

像这样:

try 
{ 
    String i = JOptionPane.showInputDialog("Enter your num:"); 
    if (i != null) 
     num = Double.parseDouble(i); 
} 

另外,尽量不要通过将 “异常”,像你这样捕获的异常。总是尽可能地指定你正在寻找的异常。 在这种情况下,您应该使用NumberFormatException而不仅仅是Exception。

catch (NumberFormatException e) 
{ 
    System.err.println("Error: Invalid Input!"); 
    JOptionPane.showMessageDialog(null, "Error: Invalid Input!", 
    "Error", JOptionPane.ERROR_MESSAGE); 
} 
+1

非常感谢!晶莹剔透。 – CompilingCyborg 2011-01-05 19:23:05

+0

虽然这些建议解决了用户点击取消的问题,但他们并没有解决用户获取超出范围加温以解决按下取消问题或在获取数字格式例外之后的问题。我可以建议将验证代码移入try语句块中的if语句。 – LINEMAN78 2011-01-06 07:14:28

1
package org.life.java.so.questions; 

import java.text.ParseException; 
import javax.swing.JOptionPane; 

/** 
* 
* @author Jigar 
*/ 
public class InputDialog { 

    public static void main(String[] args) throws ParseException { 
     String input = JOptionPane.showInputDialog("Enter Input:"); 
     if(input == null){ 
      System.out.println("Calcel presed"); 
     }else{ 
      System.out.println("OK presed"); 
     } 


    } 
} 
+0

我喜欢看完整的代码示例。你的特别好。但是,我可以做一个“公民的请求”?删除冗余线路。 IDE之外的顶部4是无意义的。第二条评论的第二行没有添加任何内容。 main结尾的2个空白行也没有添加任何值。删除这些线会缩短E.G.从26到19行 - 垂直节省25%左右。这可能与拥有大型显示器的人无关,但对于使用较小分辨率的较旧显示器的用户而言,更容易在整个屏幕中看到整个示例。感谢您考虑它。 – 2011-01-06 00:44:01

+0

@安德鲁·汤普森考虑:) – 2011-01-06 06:40:32

相关问题