2013-11-04 55 views
0

有問題,我創建按鈕的方法。編譯/運行正常,但當嘗試來計算,我得到以下錯誤:「LoanFrame $ 1CalcListener.actionPerformed(LoanFrame.java:60)」這是我annualR doubleparse代碼。任何原因爲什麼這給我錯誤,以及如何解決它?儲蓄計算器GUI

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JList; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 
import javax.swing.JTextField; 


public class LoanFrame extends JFrame { 



private static final int FRAME_WIDTH = 650; 
private static final int FRAME_LENGTH = 300; 
private static final double INITIAL_BALANCE = 0.0; 
private static final double ANNUAL_RATE = 0.0; 
private static final int YEARS = 0; 

String[] result; 
private JLabel initialLabel; 
private JLabel rate; 
private JLabel years; 
private JTextField initialBal; 
private JTextField annualRate; 
private JTextField numOfYears; 
private JButton calculate; 
private JPanel panel; 
private JList box; 
private JScrollPane scroll; 


LoanFrame(){ 
    createTextField(); 
    createButton(); 
    createScrollPane(); 
    createPanel(); 
    setSize(FRAME_WIDTH, FRAME_LENGTH); 
} 

private void createTextField(){ 
    final int FIELD_WIDTH = 10; 
    initialLabel = new JLabel("Initial Balance"); 
    initialBal = new JTextField(FIELD_WIDTH); 
    rate = new JLabel("Annual Rate"); 
    annualRate = new JTextField(FIELD_WIDTH); 
    years = new JLabel("Number of Years"); 
    numOfYears = new JTextField(FIELD_WIDTH); 
} 
private void createButton(){ 
     calculate = new JButton("Calculate"); 
     class CalcListener implements ActionListener 
     { 
     public void actionPerformed(ActionEvent event) 
     { 
      double initialB = Double.parseDouble(initialBal.getText()); 
      double annualR = Double.parseDouble(rate.getText()); 
      int y = Integer.parseInt(years.getText()); 
      annualR = annualR/100; 

      for (int i = 0; i < y; i++) { 
       double newbalance = initialB * annualR; 
       initialB += newbalance; 
       String test = String.valueOf(initialB); 
       result[i] = test; 
      } 
      box = new JList(result); 
      scroll = new JScrollPane(box); 
      getContentPane().add(scroll); 
     }    
     } 
     ActionListener d = new CalcListener(); 
     calculate.addActionListener(d); 
} 
private void createScrollPane(){ 
    scroll = new JScrollPane(); 
} 
private void createPanel() 
    { 
     panel = new JPanel(); 
     panel = new JPanel(); 
     panel.add(initialLabel); 
     panel.add(initialBal); 
     panel.add(rate); 
     panel.add(annualRate); 
     panel.add(years); 
     panel.add(numOfYears); 
     panel.add(calculate); 
     panel.add(scroll); 
     add(panel); 
    } 
} 

編輯:謝謝你的答覆,我的錯誤(雙解析固定(annualRate.getText)

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "Number of Years" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at LoanFrame$1CalcListener.actionPerformed(LoanFrame.java:61) 
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) 
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) 
at javax.swing.DefaultButtonModel.setPressed(Unknown Source) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$000(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.awt.EventQueue$1.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$2.run(Unknown Source) 
at java.awt.EventQueue$2.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
+3

什麼是錯誤消息和/或錯誤類型的文本,您發佈的只是發生異常的代碼行。 – jzd

+1

正如JZD說,很難回答不知道實際的錯誤是什麼。一般情況下,我猜想,如果你用Double#parseDouble得到一個異常,它可能是因爲文本不是一個數字(意味着不是一個可分析的double值),或者'getText()'方法返回null 。 –

+0

謝謝,添加了錯誤列表。 – Christian

回答

4

你從JLabel閱讀,而不是JTextField

double annualR = Double.parseDouble(rate.getText()); 

應該

double annualR = Double.parseDouble(annualRate.getText()); 
+1

不錯,非常細心。 –

+0

感謝您的答覆,並修復它。 :) – Christian

+1

沒問題,你會發現同applys爲'years'和'numOfYears'? – Reimeus

0

I get the following error: "LoanFrame$1CalcListener.actionPerformed(LoanFrame.java:60)" which is my annualR doubleparse code

的文本rate.getText()是無效的格式。

+0

感謝您的回覆。是的,我需要修復這部分,並更仔細地檢查我的代碼 – Christian

1

你在該行獲得了NullPointerException

for (int i = 0; i < y; i++) {   
    double newbalance = initialB * annualR; 
    initialB += newbalance; 
    String test = String.valueOf(initialB); 
    result[i] = test; // <-- NPE here 
} 

因爲result從未初始化。

+0

感謝您的答覆,一定會這樣做。 – Christian