2014-01-14 3 views
0

Я в довольно уникальной ситуации, основанной на том, что я видел в кодировке другого. Я работаю над многокадровым графическим интерфейсом для школьного проекта и имеет четыре конвертера между различными единицами: Масса, Объем, Расстояние и Температура. Проблема я бегу в ложь с текстом Приёмников для моих преобразований температуры:NumberFormatException в многокадровом графическом интерфейсе

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)); 
    } 
} 

Все эти работы с точно такой же кодирование без каких-либо ошибок. Как это исправить? Это последний вопрос в моем коде.

код, чтобы открыть кадр, который содержит преобразования TEMP:

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); 
    } 
} 
+1

Что такое текст, на котором 'Integer.parseInt' бросает' NumberFormatException'? – rgettman

+2

Почему 'Integer.parse', когда значения' mile' и 'kilo'' double'? –

+0

В Java целочисленное деление '5/9' равно' 0', а '9/5' -' 1'. Вместо этого используйте 'double' литералы. – rgettman

ответ

2

Вы декларировать 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 
+0

Спасибо за совет. Я изменил синтаксический анализ на двойной, а также в соответствии с вашим примером try-catch, но он все же решил не работать и извлекать исключение. – user3194855

+0

Какое исключение и какая строка кода вызывает его? – mdl

+0

Плохо, я отвлекся жизнью. Я решил проблему, это была переменная проблема в слушателе – user3194855

Смежные вопросы