繁体   English   中英

Java货币转换器应用程序中的异常处理

[英]Exception Handling in Java currency converter app

我的代码运行正常,并且该应用程序运行正常,除非当我有意输入错误数据并希望处理该错误时。 我已经在线搜索过,但实际上无法弄清楚为什么未处理我的代码中的错误。 控制台中输出的第一行异常是:线程“ AWT-EventQueue-0”中的异常java.lang.NumberFormatException:对于输入字符串:“ as”

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class MyFrame extends JFrame implements ActionListener{
    public static final long serialVersionUID = 1L;

    JPanel panel1, panel2, panel3;
    JLabel cedi_tag, value_equivalent;
    JTextField txtCedi, txtResults;
    JButton btn_usd, btn_euro, btn_pounds;
    JMenuBar mainMenu = new JMenuBar();
    JMenu fileMenu = new JMenu("File");
    JMenuItem exitItem = new JMenuItem("Exit...");

    MyFrame(String title){
        super(title);
        setSize(300, 300);
        setLocation(400, 200);
        setLayout(new FlowLayout());
        setDefaultCloseOperation(EXIT_ON_CLOSE);

        fileMenu.add(exitItem);
        mainMenu.add(fileMenu);
        exitItem.addActionListener(this);
        this.setJMenuBar(mainMenu);

        cedi_tag = new JLabel("Enter GHC");
        panel1 = new JPanel();
        panel1.add(cedi_tag);
        getContentPane().add(panel1);

        txtCedi = new JTextField(15);
        panel1.add(txtCedi);

        value_equivalent = new JLabel("Result");
        panel2 = new JPanel();
        panel2.add(value_equivalent);
        getContentPane().add(panel2, BorderLayout.SOUTH);

        txtResults = new JTextField(15);
        txtResults.setEditable(false);
        panel2.add(txtResults);

        btn_usd = new JButton("Dollars");
        btn_usd.setActionCommand("dollars");
        btn_usd.addActionListener(this);
        panel3 = new JPanel();
        panel3.add(btn_usd);
        getContentPane().add(panel3);

        btn_pounds = new JButton("Pounds");
        btn_pounds.addActionListener(this);
        btn_pounds.setActionCommand("pounds");
        panel3.add(btn_pounds);

        btn_euro = new JButton("Euros");
        btn_euro.addActionListener(this);
        btn_euro.setActionCommand("euros");
        panel3.add(btn_euro);
    }

    public void actionPerformed(ActionEvent event){
        String strCedi = txtCedi.getText();
        double cedi_value = Double.parseDouble(strCedi);

        if(event.getActionCommand().equals("dollars")){
            try{
                double answer = Converter.CedisToDollars(cedi_value);
                txtResults.setText(String.format("%.2f", answer));
            }

            catch(Exception e){
                txtResults.setText("Please enter a number");
            }
        }

        if(event.getActionCommand().equals("pounds")){
            try{
                double answer = Converter.CedisToPounds(cedi_value);
                txtResults.setText(String.format("%.2f", answer));
            }

            catch(Exception e){
                txtResults.setText("Please enter a valid amount");
            }

        }

        if(event.getActionCommand().equals("euros")){
            try{
                double answer = Converter.CedisToEuros(cedi_value);
                txtResults.setText(String.format("%.2f", answer));
            }

            catch(Exception ex){
                txtResults.setText("Please Enter a valid amount");
            }

        }
        exitItem.setActionCommand("exit");
        }

    }

class Converter{
    public static double CedisToDollars(double cedis){
        double dollar_value = cedis * 4.2;
        return dollar_value;
    }

    public static double CedisToPounds(double cedis){
        double pounds_value = cedis * 5.1;
        return pounds_value;
    }

    public static double CedisToEuros(double cedis){
        double euros_value = cedis * 4.6;
        return euros_value;
    }
}

public class CurrencyConverter {

    public static void main(String[] args) {
        MyFrame master = new MyFrame("Currency Converter");
        master.setVisible(true);
    }

}

异常来自:

Double.parseDouble(strCedi);

这在try-catch块之外。

在其周围放置一个try-catch块,并添加一些处理代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM