2015-04-04 41 views
0
private class CalculateButtonHandler implements ActionListener{ 

    public CalculateButtonHandler(JTextField initialAmmount, JTextField yearsToMaturity, JTextField interestRate){ 
     double endingBalance; 
     String text = interestRate.getText(); 
     int interestRateInt = Integer.parseInt(text); 

     String text1 = yearsToMaturity.getText(); 
     int yearsToMaturityInt = Integer.parseInt(text); 

     String text2 = initialAmount.getText(); 
     int initialAmountInt = Integer.parseInt(text); 

     endingBalance = initialAmountInt * Math.pow((1 + interestRateInt/1), 1 *   yearsToMaturityInt); 
    } 

    public void actionPerformed(ActionEvent e){ 
    } 
} 

当前运行时错误: 异常线程“main” java.lang.NumberFormatException:对于输入字符串:“”检查空的JTextField用户输入之前

我假设的运行 - 发生时间错误是因为程序运行时没有输入,用户没有机会输入要解析为int的字符串。我无法弄清楚如何检查这一点。

+0

一个简单的解决方案可以是,假设它发生在按钮点击,禁用按钮,直到输入所有有效的输入。 – 2015-04-04 10:17:39

+1

考虑使用'JSpinner'和['SpinnerNumberModel'](https://docs.oracle.com/javase/8/docs/api/javax/swing/SpinnerNumberModel.html)而不是'JTextField'。 – 2015-04-04 10:28:36

+0

顺便说一句,在你的代码中有一个错字 - 你使用Integer.parseInt(文本)三次,即使这些变量被命名为text,text1和text2。 – 2015-04-04 13:00:37

回答

0

处理按钮点击事件的代码需要在actionPerformed方法中,而不是在构造函数中。

private class CalculateButtonHandler implements ActionListener{ 

    private final JTextField interestRate; 
    private final JTextField yearsToMaturity; 
    private final JTextField interestRate; 

    public CalculateButtonHandler(JTextField initialAmmount, JTextField  yearsToMaturity, JTextField interestRate) { 
     this.initialAmmount = initialAmmount; 
     this.yearsToMaturity = yearsToMaturity; 
     this.interestRate = interestRate; 
    } 

    public void actionPerformed(ActionEvent e){ 
     double endingBalance; 
     String text = interestRate.getText(); 
     int interestRateInt = Integer.parseInt(text); 

     String text1 = yearsToMaturity.getText(); 
     int yearsToMaturityInt = Integer.parseInt(text); 

     String text2 = initialAmount.getText(); 
     int initialAmountInt = Integer.parseInt(text); 

     endingBalance = initialAmountInt * Math.pow((1 + interestRateInt/1), 1 *   yearsToMaturityInt); 
    } 
} 
+0

在我将代码移入actionPerformed方法后,它编译得很好,并且初始运行时错误已修复,但现在我被卡住在 “AWT-EventQueue-0”java.lang.NumberFormatException:对于输入字符串:“CD Interest率:“ – kzisme 2015-04-04 15:47:12

+0

这发生在你点击按钮时,对吧?你是否点击了它而没有在文本字段填入参数?正如@Shrikant Havale指出的那样,如果你想阻止用户这样做,那么在禁用按钮直到所有的值被填充之前怎么样?或者可能使用默认值?取决于您的实际使用情况。 – 2015-04-04 15:50:59

+0

即使界面出现在屏幕上之前,也会发生该错误。 – kzisme 2015-04-05 00:07:36