2017-04-12 4 views
-2

これは1つのコードファイルです(これはエラーの箇所ですが間違いかもしれません)実行時エラーは、このファイルにある "年:"を記述します。ここでは完全なエラーです。スレッドの例外 "AWT-EventQueueの-0" java.lang.NumberFormatException:入力文字列の場合: "年:" ここにスレッド「AWT-EventQueue-0」で例外が発生しています。java.lang.NumberFormatException:入力文字列:「年」:

import java.awt.Dimension; 
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.JPanel; 
import javax.swing.JTextField; 

/** 
    A frame that shows the growth of an investment with variable interest, 
    using a bar chart. 
*/ 
public class InvestmentFrame4 extends JFrame 
{ 
    private static final int FRAME_WIDTH = 400; 
    private static final int FRAME_HEIGHT = 400; 

    private static final int CHART_WIDTH = 300; 
    private static final int CHART_HEIGHT = 300; 

    private static final double DEFAULT_RATE = 5; 
    private static final double INITIAL_BALANCE = 1000; 

    private JLabel rateLabelInitialInvestment; 
    private JLabel rateLabelInterestRate; 
    private JLabel rateLabelYears; 
    private JTextField rateFieldInitialInvestment; 
    private JTextField rateFieldInterestRate; 
    private JTextField rateFieldYears; 
    private JButton button; 
    private ChartComponent chart; 
    private double balance; 

    public InvestmentFrame4() 
    { 
    // balance = Double.parseDouble(rateLabelInitialInvestment.getText()); 
     chart = new ChartComponent(3 * INITIAL_BALANCE); 
     chart.setPreferredSize(new Dimension(CHART_WIDTH, CHART_HEIGHT)); 
     chart.append(INITIAL_BALANCE); 

     createInterestRateTextField(); 
     createInitialInvestmentTextField(); 
     createYearsTextField(); 
     createButton(); 
     createPanel(); 

     setSize(FRAME_WIDTH, FRAME_HEIGHT); 
    } 

    private void createInterestRateTextField() 
    { 
     rateLabelInterestRate = new JLabel("Interest Rate: "); 

     final int FIELD_WIDTH = 25; 
     rateFieldInterestRate = new JTextField(FIELD_WIDTH); 
     rateFieldInterestRate.setText("" + DEFAULT_RATE); 
    } 

    private void createInitialInvestmentTextField() 
    { 
     rateLabelInitialInvestment = new JLabel("Initial Investment: "); 

     final int FIELD_WIDTH = 20; 
     rateFieldInitialInvestment = new JTextField(FIELD_WIDTH); 
     rateFieldInitialInvestment.setText("" + DEFAULT_RATE); 
    } 

    private void createYearsTextField() 
    { 
     rateLabelYears = new JLabel("Years: "); 

     final int FIELD_WIDTH = 20; 
     rateFieldYears = new JTextField(FIELD_WIDTH); 
     rateFieldYears.setText("" + DEFAULT_RATE); 
    } 

    class AddInterestListener implements ActionListener 
    { 
     public void actionPerformed(ActionEvent event) 
     { 
     for(int i = 1; i < Integer.parseInt(rateLabelYears.getText().trim()); i++) 
     { 
      balance = Double.parseDouble(rateLabelInitialInvestment.getText()) * Math.pow(1.0 + Double.parseDouble(rateLabelInterestRate.getText()), Integer.parseInt(rateFieldYears.getText())); 
     } 
     }    
    } 

    private void createButton() 
    { 
     button = new JButton("Compound Interest");  

     ActionListener listener = new AddInterestListener(); 
     button.addActionListener(listener); 
    } 

    private void createPanel() 
    { 
     JPanel panel = new JPanel(); 
     panel.add(rateLabelInitialInvestment); 
     panel.add(rateFieldInitialInvestment); 
     panel.add(rateLabelInterestRate); 
     panel.add(rateFieldInterestRate); 
     panel.add(rateLabelYears); 
     panel.add(rateFieldYears); 
     panel.add(button); 
     panel.add(chart);  
     add(panel); 
    } 
} 

は別のファイル

public class ChartComponent extends JComponent 
{ 
    private ArrayList<Double> values; 
    private double maxValue; 

    public ChartComponent(double max) 
    { 
     values = new ArrayList<Double>(); 
     maxValue = max; 
    } 

    public void append(double value) 
    { 
     values.add(value); 
     repaint(); 
    } 

    public void paintComponent(Graphics g) 
    { 
     final int GAP = 5; 
     final int BAR_HEIGHT = 10; 

     int y = GAP; 
     for (double value : values) 
     { 
     int barWidth = (int) (getWidth() * value/maxValue); 
     g.fillRect(0, y, barWidth, BAR_HEIGHT); 
     y = y + BAR_HEIGHT + GAP; 
     } 
    } 
} 

です最後にメイン

import javax.swing.JFrame; 

/** 
    This program displays the growth of an investment, showing 
    a bar chart. 
*/ 
public class InvestmentViewer4 
{ 
    public static void main(String[] args) 
    { 
     JFrame frame = new InvestmentFrame4(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 

誰かが私はそれが大幅に評価される実行時エラーが発生していることを説明してくださいことができる場合!

+0

ようこそ!デバッガの使い方を学ぶ必要があるようです。 [補完的なデバッグ手法](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)にご協力ください。その後も問題が残っている場合は、問題を示す[最小限の、完全で実証可能な例](http://stackoverflow.com/help/mcve)に戻ってください。 –

+0

'Years:'は数値に変換できません...私は例外を通して実際に何が問題なのかわかりません - あなたは 'java.lang.NumberFormatException'の検索を試みましたか? ? – MadProgrammer

+1

エラーがあなたのforループの中にあります.1つのラベルに "years"というタイトルがあり、それをintに解析しようとしています。テキストフィールドのテキストを取得しようとしましたか? –

答えて

0

は、ここでの問題は発生します。

for(int i = 1; i < Integer.parseInt(rateLabelYears.getText().trim()); i++) 

rateLabelYearsは、あなたがそうでなければ、それを変更しない限り、常に"years"のテキストを持っていますJLabel、です。あなたは入力した年の入力を受け入れるJTextFieldの識別子であるrateFieldYearsと誤解しています。

あなたはこれが必要になります:スタックオーバーフローへ

for(int i = 1; i < Integer.parseInt(rateFieldYears.getText().trim()); i++){ 
    ... 
    ... 
    ... 
} 
関連する問題