Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.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
“线程中的异常”;AWT-EventQueue-0“;java.lang.NumberFormatException:空字符串:java中的错误_Java - Fatal编程技术网

“线程中的异常”;AWT-EventQueue-0“;java.lang.NumberFormatException:空字符串: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

我制作了一个简单的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); }