Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 多框架GUI中的NumberFormatException_Java_User Interface_Awt_Converter_Numberformatexception - Fatal编程技术网

Java 多框架GUI中的NumberFormatException

Java 多框架GUI中的NumberFormatException,java,user-interface,awt,converter,numberformatexception,Java,User Interface,Awt,Converter,Numberformatexception,根据我在其他人的编码中看到的情况,我处于一个相当独特的境地。我正在为一个学校项目开发一个多框架GUI,它有四个不同单位之间的转换器:质量、体积、距离和温度。我遇到的问题在于温度转换的文本侦听器: private class TempListener implements ActionListener{ public void actionPerformed (ActionEvent event){ double faren, cels; String

根据我在其他人的编码中看到的情况,我处于一个相当独特的境地。我正在为一个学校项目开发一个多框架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并阻止它完成计算。现在,这个编码几乎和我的教科书中的一个类似的程序相同,只是编辑了变量类型。我担心的是,其他帧基于同一块进行全功能计算:

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

当值
mile
kilo
double
时,
Integer.parseInt
在什么文本上抛出
NumberFormatException
?在Java中,整数分割
5/9
0
,而
9/5
1
。改为使用
double
文本。在任何地方尝试使用
double
值。这个错误可能来自一个星座,比如:
Integer.parseInt(Double.toString(1.0))
@argetman在本例中只是一个糟糕的样式,没有任何伤害,但是
faren
cells
已经是双值,其余的被强制。感谢您的建议。根据您的try-catch示例,我将解析也更改为double,但它仍然决定不工作并拉取异常。糟糕的是,我被生活分散了注意力。我解决了这个问题,这是侦听器中的一个可变问题