Java 多框架GUI中的NumberFormatException
根据我在其他人的编码中看到的情况,我处于一个相当独特的境地。我正在为一个学校项目开发一个多框架GUI,它有四个不同单位之间的转换器:质量、体积、距离和温度。我遇到的问题在于温度转换的文本侦听器: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
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,但它仍然决定不工作并拉取异常。糟糕的是,我被生活分散了注意力。我解决了这个问题,这是侦听器中的一个可变问题