java - 多框架 GUI 中的 NumberFormatException

标签 java user-interface awt converters numberformatexception

根据我在其他人的编码中看到的情况,我处于一个相当独特的情况。我正在为一个学校项目开发一个多框架 GUI,它有四个不同单位之间的转换器:质量、体积、距离和温度。我遇到的问题在于温度转换的文本监听器:

private class TempListener implements ActionListener{ 
    public void actionPerformed (ActionEvent event){ 
        double faren, cels; 
        String text = temperature.getText(); 
        faren = Integer.parseInt(text); 
        cels = (faren-32) * 5/9; 
        rLabelT.setText(Double.toString(cels)); 
    } 
} 

private class Temp1Listener implements ActionListener{ 
    public void actionPerformed (ActionEvent event){ 
        double faren, cels; 
        String text = temperature1.getText(); 
        cels = Integer.parseInt(text); 
        faren = (cels+32) * 9/5; 
        rLabelT1.setText(Double.toString(faren)); 
    } 
} 

Integer.parseInt 方法捕获 NumberFormatException.java 并阻止其完成计算。现在,这个编码几乎与我教科书中的类似程序相同,唯一的编辑是变量类型。我担心的是其他框架基于同一个 block 具有完整的功能计算:

private class MassListener implements ActionListener{ 
    public void actionPerformed (ActionEvent event){ 
        double pounds, kilograms; 
        String text = mass.getText(); 
        pounds = Integer.parseInt(text); 
        kilograms = pounds/2.2; 
        rLabelM.setText(Double.toString(kilograms)); 
    } 
} 
private class VolumeListener implements ActionListener{ 
    public void actionPerformed (ActionEvent event){ 
        double litres, gallons; 
        String text = volume.getText(); 
        gallons = Integer.parseInt(text); 
        litres = .264 * gallons; 
        rLabelV.setText(Double.toString(litres)); 
    } 
} 
private class DistListener implements ActionListener{ 
    public void actionPerformed (ActionEvent event){ 
        double miles, kilo; 
        String text = distance.getText(); 
        miles = Integer.parseInt(text); 
        kilo = miles * 1.609; 
        rLabelD.setText(Double.toString(kilo)); 
    } 
} 

所有这些都使用完全相同的编码,没有任何错误。我该如何解决?这是我的代码中要解决的最后一个问题。

打开包含临时转换的框架的代码:

   private class ButtonTListener implements ActionListener{ 
    public void actionPerformed (ActionEvent event){ 
        JFrame dialogT = new JFrame ("Temperature"); 
        dialogT.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
        dialogT.setBounds(750,650,400,150); 
        dialogT.setVisible(true); 
        iLabelT = new JLabel ("Enter a Temperature in Farenheit: "); 
        oLabelT = new JLabel ("Temperature in Celsius: "); 
        rLabelT = new JLabel ("--"); 
        temperature = new JTextField (5); 
        temperature.addActionListener(new TempListener()); 
        iLabelT1 = new JLabel ("Enter a Temperature in Celsius: "); 
        oLabelT1 = new JLabel ("Temperature in Farenheit: "); 
        rLabelT1 = new JLabel ("--"); 
        temperature1 = new JTextField (5); 
        temperature.addActionListener(new Temp1Listener()); 
        Temperature1 = new JPanel(); 
        Temperature1.setPreferredSize(new Dimension (400,100)); 
        Temperature1.setLayout(new FlowLayout()); 
        Temperature1.setBackground (Color.yellow); 
        Temperature1.add(iLabelT); 
        Temperature1.add(temperature); 
        Temperature1.add(oLabelT); 
        Temperature1.add(rLabelT); 
        Temperature1.add(iLabelT1); 
        Temperature1.add(temperature1); 
        Temperature1.add(oLabelT1); 
        Temperature1.add(rLabelT1); 
        dialogT.getContentPane().add(Temperature1); 
    } 
} 

最佳答案

您声明 double 值,然后尝试使用 Integer 解析它们。根据任何定义,整数都是没有小数位的数字。因此,当 Java 遇到输入中的任何小数位时,都会失败。相反,您应该尝试使用 Double 来解析它们。

例如:

    double d1, d2;
    try
    {
        System.out.println("Parsing d1...");
        d1 = Integer.parseInt("5.4");    // using Integer to parse a double fails
        System.out.println("d1: " + d1);
    }
    catch (NumberFormatException e1)
    {
        System.err.println("exception parsing 5.4 as an integer");
        e1.printStackTrace();
    }

    try
    {
        System.out.println("Parsing d2...");
        d2 = Double.parseDouble("5.4");    // using Double to parse a double succeeds
        System.out.println("d2: " + d2);
    }
    catch (NumberFormatException e2)
    {
        System.err.println("exception parsing 5.4 as a double");
        e2.printStackTrace();
    };

输出:

Parsing d1...
exception parsing 5.4 as an integer
java.lang.NumberFormatException: For input string: "5.4"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
    at java.lang.Integer.parseInt(Integer.java:458)
    at java.lang.Integer.parseInt(Integer.java:499)
    at pkg.Main.main(Main.java:40)
Parsing d2...
d2: 5.4

关于java - 多框架 GUI 中的 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119052/

相关文章:

java - 无法在 JLabel 上显示图像

java - 比较两个 ArrayLists - 一个作为另一个的子集

jquery - 从其他页面上的链接覆盖默认的 jQuery UI 选项卡

android - 为什么从 onMeasure 设置文本不会影响 TextView?

unity3d - 将内容缩放到最大的 UI 元素(Unity)

java - 从 Graphics2D (JAVA) 获取 awt.Image 数据

java - 连接到数据库时出现问题。 Java/SQLite

java - Java 中的网络通信选项(客户端/服务器)

java - 如何使用 Java 代码运行 Java 包内的批处理文件?

java - JDialog 没有出现