-2
이것은 하나의 코드 파일입니다 (오류가있는 곳이라고 생각하지만 실수라고 생각합니다.) 런타임 오류는이 파일에있는 "years :"을 언급합니다. 여기에 전체 오류가 있습니다. 스레드 "AWT-EventQueue의-0"java.lang.NumberFormatException의 예외 : 입력 문자열 : "(년) :"여기"AWT-EventQueue-0"스레드에서 예외가 발생했습니다. java.lang.NumberFormatException : 입력 문자열의 경우 : "Years :"
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);
}
}
누군가가 설명해 주시면 런타임 오류가 발생하여 크게 감사하겠습니다 !!!!
에 오신 것을 환영합니다! 디버거를 사용하는 법을 배워야 할 것 같습니다. [보완적인 디버깅 기술] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 참고하십시오. 나중에 문제가 계속되는 경우 문제를 나타내는 [Minimal, Complete and Verifiable Example (http://stackoverflow.com/help/mcve)]을 다시 보내주십시오. –
'Years :'는 숫자로 변환 될 수 없다. 예외를 통해 설명 할 수 있었지만, 실제로 문제가 무엇인지 확신 할 수 없었다.'java.lang.NumberFormatException'에 대한 검색을 시도 했습니까? ? – MadProgrammer
오류가 for 루프 내에 있고, 하나의 레이블에 "years"라는 제목이 있고 그 문자열을 int로 구문 분석하려고하면 텍스트 필드의 텍스트를 가져 왔습니까? –