“线程中的异常”;AWT-EventQueue-0“;java.lang.NumberFormatException:空字符串:java中的错误
我制作了一个简单的Java转换器,它将公里转换为米,摄氏度转换为华氏度,千克转换为克。将公里、米和千克转换为克似乎没问题。但当我输入温度值时,我总是会得到以下错误:“线程中的异常”;AWT-EventQueue-0“;java.lang.NumberFormatException:空字符串:java中的错误,java,Java,我制作了一个简单的Java转换器,它将公里转换为米,摄氏度转换为华氏度,千克转换为克。将公里、米和千克转换为克似乎没问题。但当我输入温度值时,我总是会得到以下错误: Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:992) at java
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:992)
at java.lang.Double.parseDouble(Double.java:510)
at converter.Converter$2.actionPerformed(Converter.java:73)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
at java.awt.Component.processMouseEvent(Component.java:6297)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3275)
at java.awt.Component.processEvent(Component.java:6062)
at java.awt.Container.processEvent(Container.java:2039)
at java.awt.Component.dispatchEventImpl(Component.java:4660)
at java.awt.Container.dispatchEventImpl(Container.java:2097)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4575)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4236)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4166)
at java.awt.Container.dispatchEventImpl(Container.java:2083)
at java.awt.Window.dispatchEventImpl(Window.java:2489)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:627)
at java.awt.EventQueue$2.run(EventQueue.java:625)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:641)
at java.awt.EventQueue$3.run(EventQueue.java:639)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:638)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
*很抱歉发布了这一切,但我只是不明白为什么会出现这个错误
这是我的密码:
package converter;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Converter {
public static double result;
public static String indicator;
public static void main(String[] args) {
JFrame converter = new JFrame();
Container content = converter.getContentPane();
converter.setLayout(new GridLayout (3,3));
final String[] convertionChoice = {" ", "Kilometer<->Meter", "Celcius<->Fahrenheit", "Kilograms<->Grams"};
JComboBox convertionList = new JComboBox(convertionChoice);
final JLabel value1 = new JLabel("---", SwingConstants.LEFT);
final JLabel value2 = new JLabel("---", SwingConstants.LEFT);
JLabel blank1 = new JLabel(" ");
JLabel blank2 = new JLabel(" ");
final JTextField one = new JTextField();
final JTextField two = new JTextField();
JButton convert = new JButton("Convert");
JButton exit = new JButton("Exit");
JButton clear = new JButton("Clear All");
convertionList.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JComboBox cb = (JComboBox)e.getSource();
String currentComboSelection = (String)cb.getSelectedItem();
if (currentComboSelection.equals(convertionChoice[1])) {
value1.setText("Kilometer");
value2.setText("Meter");
indicator = "K/M"; }
if (currentComboSelection.equals(convertionChoice[2])) {
value1.setText("Celcius");
value2.setText("Fahrenheit");
indicator = "C/F"; }
if (currentComboSelection.equals(convertionChoice[3])) {
value1.setText("Kilograms");
value2.setText("Grams");
indicator = "KG/G";}
}
} );
convert.addActionListener(new ActionListener() {
@Override
public void actionPerformed (ActionEvent e) {
if("K/M".equals(indicator)) {
String km1 = one.getText();
String m1 = two.getText();
if(!km1.isEmpty()) {
double km2 = Double.parseDouble(km1);
result = km2 * 1000;
String result2 = Double.toString(result);
two.setText(result2);}
else {
double m2 = Double.parseDouble(m1);
result = m2 / 1000;
String result2 = Double.toString(result);
one.setText(result2); } }
if("C/F".equals(indicator)) {
String cel = one.getText();
double cel2 = Double.parseDouble(cel);
String fah = two.getText();
double fah2 = Double.parseDouble(fah);
if(!cel.isEmpty()) {
result = (fah2 - 32) * 0.56;
String result2 = Double.toString(result);
two.setText(result2); }
else {
result = cel2 * 1.8 + 32;
String result2 = Double.toString(result);
one.setText(result2); } }
if("KG/G".equals(indicator)) {
String kg1 = one.getText();
String g1 = two.getText();
if(!kg1.isEmpty()) {
double kg2 = Double.parseDouble(kg1);
result = kg2 * 1000;
String result2 = Double.toString(result);
two.setText(result2);}
else {
double g2 = Double.parseDouble(g1);
result = g2 / 1000;
String result2 = Double.toString(result);
one.setText(result2); } }
}
});
exit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
clear.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
one.setText("");
two.setText("");
}
});
content.add(convertionList);
content.add(value1);
content.add(one);
content.add(blank1);
content.add(value2);
content.add(two);
content.add(convert);
content.add(clear);
content.add(exit);
converter.setSize(700,200);
converter.setTitle("Converter");
converter.setVisible(true);
converter.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
String cel = one.getText();
double cel2 = Double.parseDouble(cel);
String fah = two.getText();
double fah2 = Double.parseDouble(fah);
if(!cel.isEmpty()) {
result = (fah2 - 32) * 0.56;
String result2 = Double.toString(result);
two.setText(result2); }
else {
result = cel2 * 1.8 + 32;
String result2 = Double.toString(result);
one.setText(result2); }
封装转换器;
导入java.awt.*;
导入java.awt.event.*;
导入javax.swing.*;
公共类转换器{
公共静态双重结果;
公共静态字符串指示符;
公共静态void main(字符串[]args){
JFrame converter=新JFrame();
容器内容=converter.getContentPane();
setLayout(新的GridLayout(3,3));
最后一个字符串[]ConversionChoice={”、“公里数”、“华氏度”、“千克数”};
JComboBox ConversionList=新的JComboBox(ConversionChoice);
最终JLabel值1=新JLabel(“--”,SwingConstants.LEFT);
最终JLabel值2=新JLabel(“--”,SwingConstants.LEFT);
JLabel blank1=新的JLabel(“”);
JLabel blank2=新的JLabel(“”);
最终JTextField one=新JTextField();
最终JTextField二=新JTextField();
JButton convert=新JButton(“convert”);
JButton exit=新JButton(“exit”);
JButton clear=新JButton(“全部清除”);
ConversionList.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
JComboBox cb=(JComboBox)e.getSource();
字符串currentComboSelection=(字符串)cb.getSelectedItem();
如果(currentComboSelection.equals(ConversionChoice[1]){
值1.setText(“公里”);
值2.设置文本(“米”);
indicator=“K/M”;}
如果(currentComboSelection.equals(ConversionChoice[2]){
价值1.setText(“Celcius”);
值2.setText(“华氏度”);
indicator=“C/F”;}
如果(currentComboSelection.equals(ConversionChoice[3]){
值1.setText(“千克”);
值2.setText(“克”);
指示剂=“千克/克”;}
}
} );
convert.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
如果(“K/M”。等于(指标)){
字符串km1=1.getText();
字符串m1=2.getText();
如果(!km1.isEmpty()){
double km2=double.parseDouble(km1);
结果=km2*1000;
字符串result2=Double.toString(结果);
2.setText(result2);}
否则{
双m2=双。双(m1);
结果=m2/1000;
字符串result2=Double.toString(结果);
一.setText(result2);}
如果(“C/F”。等于(指标)){
字符串cel=1.getText();
double cel2=double.parseDouble(cel);
字符串fah=two.getText();
double fah2=double.parseDouble(fah);
如果(!cel.isEmpty()){
结果=(fah2-32)*0.56;
字符串result2=Double.toString(结果);
2.setText(result2);}
否则{
结果=cel2*1.8+32;
字符串result2=Double.toString(结果);
一.setText(result2);}
如果(“千克/克”。等于(指标)){
字符串kg1=1.getText();
字符串g1=two.getText();
如果(!kg1.isEmpty()){
double kg2=double.parseDouble(kg1);
结果=kg2*1000;
字符串result2=Double.toString(结果);
2.setText(result2);}
否则{
double g2=double.parseDouble(g1);
结果=g2/1000;
字符串result2=Double.toString(结果);
一.setText(result2);}
}
});
exit.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
系统出口(0);
}
});
clear.addActionListener(新ActionListener(){
@凌驾
已执行的公共无效操作(操作事件e){
一.setText(“”);
2.setText(“”);
}
});
content.add(转换列表);
内容。添加(值1);
内容。增加(一);
内容。添加(空白1);
内容。添加(值2);
增加(二);
内容。添加(转换);
内容。添加(清除);
内容。添加(退出);
转换器设置尺寸(700200);
转换器。设置标题(“转换器”);
converter.setVisible(true);
converter.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
谁能告诉我怎么了吗?”因为每当我输入摄氏度值并按下“计算”按钮时,该错误总是出现
任何回答、评论或建议都将不胜感激:)从您的代码中,我猜您输入的是摄氏度或而不是两者。但是这里
String cel = one.getText();
double cel2 = Double.parseDouble(cel);
String fah = two.getText();
double fah2 = Double.parseDouble(fah);
您正在分析这两个。因此,其中一个为空,无法解析为双精度。您需要首先检查哪一个不是空的:
if("C/F".equals(indicator)) {
if(!one.getText().isEmpty()) {
String cel = one.getText();
double cel2 = Double.parseDouble(cel);
// Processing ...
} else if(!two.getText().isEmpty()) {
String fah = two.getText();
double fah2 = Double.parseDouble(fah);
// Processing ...
}
}
我没有注意,但你已经用km和kg做了,这就是为什么只有temperat才会发生这种情况
String cel = one.getText();
String fah = two.getText();
if(!cel.isEmpty()) {
double cel2 = Double.parseDouble(cel);
result = cel2 * 1.8 + 32;
String result2 = Double.toString(result);
two.setText(result2);
}
else {
double fah2 = Double.parseDouble(fah);
result = (fah2 - 32) * 0.56;
String result2 = Double.toString(result);
one.setText(result2); }