根据我在其他人的编码中看到的情况,我处于一个相当独特的情况。我正在为一个学校项目开发一个多框架 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/