[英]JFrame, JTextArea, and Setting Variables
我有一个程序,希望使用JFrame和8个文本区域来设置8个变量的值。 当我填写所有文本区域时,程序将运行。 当我将文本区域留空时,程序将失败。 我收到以下错误:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
然后,我得到一长串我认为发生错误的位置的清单?
因此,我尝试使用此if语句说,如果将设置x3,y3,x4,y4
值的文本区域留为空白,则程序仍将运行。
我有部分程序可以分别处理2、3和4个坐标对。
if(x3 == null && y3 == null && x4 == null && y4 == null){
r1 = new Regression(x1,y1,x2,y2,x3,y3,x4,y4);
r1.computation();
}
在x3 == null
,我得到了其他信息:对于参数类型double,null,未定义运算符==
关于如何在不填充所有文本区域的情况下运行程序的任何想法?
我是Java的新手,现在才刚开始适应它。
编辑:下面的完整代码
package javaPackage;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Frame extends JFrame {
private static final long serialVersionUID = 1L;
public double x1;
public double y1;
public double x2;
public double y2;
public double x3;
public double y3;
public double x4;
public double y4;
public Regression r1;
public Regression2 r2;
public static void main(String[] args){
new Frame().setVisible(true);
}
public Frame(){
super("Senior Design");
setSize(600, 600);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new FlowLayout());
final JTextArea x1Test= new JTextArea (1,1);
final JTextArea y1Test= new JTextArea (1,1);
final JTextArea x2Test= new JTextArea (1,1);
final JTextArea y2Test= new JTextArea (1,1);
final JTextArea x3Test= new JTextArea (1,1);
final JTextArea y3Test= new JTextArea (1,1);
final JTextArea x4Test= new JTextArea (1,1);
final JTextArea y4Test= new JTextArea (1,1);
add(x1Test);
add(y1Test);
add(x2Test);
add(y2Test);
add(x3Test);
add(y3Test);
add(x4Test);
add(y4Test);
JButton button = new JButton("Compute");
add(button);
button.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
x1 = Double.parseDouble(x1Test.getText()); //need to convert to doubles
y1 = Double.parseDouble(y1Test.getText());
x2 = Double.parseDouble(x2Test.getText());
y2 = Double.parseDouble(y2Test.getText());
x3 = Double.parseDouble(x3Test.getText());
y3 = Double.parseDouble(y3Test.getText());
x4 = Double.parseDouble(x4Test.getText());
y4 = Double.parseDouble(y4Test.getText());
if(x3 == null && y3 == null && x4 == null && y4 == null){
r1 = new Regression(x1,y1,x2,y2,x3,y3,x4,y4);
r1.computation();
}
r2=new Regression2(x1,y1,x2,y2,x3,y3,x4,y4);//initializes the variables
r2.computation();//starts the computation
}
});
}
}
NumberFormatException
/”关于如何在不填充所有文本区域的情况下运行程序的任何想法?
您可能正在尝试在初始化任何事件之前解析文本(在初始化过程中)。 我在这里看到很多东西是一个错误。 喜欢
JTextField field = new JTextField();
double num = Double.parseDouble(field.getText());
毫无疑问,这将为您带来NumberFormatException
因为其中没有文本(错误提示为空字符串)。
您需要等到激发某些事件后再解析文本,而不是在初始化过程中。 例如按一下按钮
private double num;
private JTextField field = new JTextField();
private JButton button = new JButton("Nutton");
...
button.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
num = Double.parseDouble(field.getText());
}
});
“在x3 == null下,我得到其他信息:对于参数类型double,null,未定义运算符==”
如果x3
是double
,这是有道理的。 如我所说,我的注释,原语(int,double等)不能为null。 它们的默认值为0,如果要检查它们是否尚未初始化,请对照0检查它们,而不是null
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.