Parsing 使用parse Double时,应用程序启动方法java.lang.reflect.InvocationTargetException中出现异常

Parsing 使用parse Double时,应用程序启动方法java.lang.reflect.InvocationTargetException中出现异常,parsing,javafx,Parsing,Javafx,因此,我试图让GUI为编程项目工作。这涉及到将其从一个简单的扫描函数更改为使用parse Double从文本字段转换用户输入。程序能够运行,但一旦我做了更改,它就会在标题中抛出异常,并在每次运行时终止程序。是的,我有一个主要的方法 以下是相关代码: public class TaxProject extends Application implements EventHandler<ActionEvent> { private Stage primaryStage; private

因此,我试图让GUI为编程项目工作。这涉及到将其从一个简单的扫描函数更改为使用parse Double从文本字段转换用户输入。程序能够运行,但一旦我做了更改,它就会在标题中抛出异常,并在每次运行时终止程序。是的,我有一个主要的方法

以下是相关代码:

public class TaxProject extends Application implements 
EventHandler<ActionEvent>
{
private Stage primaryStage;
private Button button;

public void start(Stage primaryStage) 
{
    Scanner input = new Scanner(System.in);
    TaxInput t1 = new TaxInput();
    StateTax s1 = new StateTax();   //Declaring Classes
    FedTax f1 = new FedTax();
    GridPane pane = new GridPane();
    pane.setPadding(new Insets(10, 10, 10, 10));
    pane.setVgap(8);
    pane.setHgap(10);


    TextField tfHrlyWage = new TextField();
    TextField tfHrsPerWeek = new TextField();
    TextField tfMaritalStatus = new TextField();
    TextField tfIncome = new TextField();
    Button btCalculate = new Button("Calculate");
    pane.add(new Label("Hourly Wage: "), 0, 0);
    pane.add(new Label("Hours Per Week: "), 0, 1);
    pane.add(new Label("Married or Single? "), 0, 2);
    pane.add(btCalculate, 0, 3);
    pane.add(tfHrlyWage, 1, 0);
    pane.add(tfHrsPerWeek, 1, 1);
    pane.add(tfMaritalStatus, 1, 2);
    pane.add(tfIncome, 1, 0);




    tfHrlyWage.setPrefColumnCount(4);
    tfHrsPerWeek.setPrefColumnCount(3);
    tfMaritalStatus.setPrefColumnCount(7);
    tfIncome.setPrefColumnCount(7);


    Scene scene = new Scene(pane, 250,150);
    primaryStage.setTitle("Tax Calculator");
    primaryStage.setScene(scene);
    primaryStage.show();

    String MaritalStatus;  //Used for deciding federal income tax brackets
    //System.out.println("Please Enter your Hourly Wage:");
    t1.HrlyWage = Double.parseDouble(tfHrlyWage.getText()); //HourlyWage Input
    //System.out.println("Please Enter the hours you work per week:");
    t1.HrsPerWeek = Double.parseDouble(tfHrsPerWeek.getText());
    MaritalStatus = tfMaritalStatus.getText();
    btCalculate.setOnAction(e -> System.out.println("Your Yearly Income After Federal and State Income Taxes is $" + f1.YearlyTakeHome));
公共类TaxProject扩展应用程序实现
事件处理程序
{
私人阶段初级阶段;
私人按钮;
公共无效开始(阶段primaryStage)
{
扫描仪输入=新扫描仪(System.in);
TaxInput t1=新的TaxInput();
StateTax s1=new StateTax();//声明类
FedTax f1=新的FedTax();
GridPane=新建GridPane();
窗格。设置填充(新插图(10,10,10,10));
窗格。设置间隙(8);
窗格。setHgap(10);
TextField tfHrlyWage=新TextField();
TextField tfHrsPerWeek=新建TextField();
TextField tfMaritalStatus=新TextField();
TextField tfIncome=新TextField();
按钮btCalculate=新按钮(“计算”);
添加(新标签(“小时工资”),0,0;
窗格。添加(新标签(“每周小时数”)、0、1;
窗格。添加(新标签(“已婚或单身?”),0,2);
添加(btCalculate,0,3);
添加(tfHrlyWage,1,0);
窗格。添加(tfHrsPerWeek,1,1);
添加(tfMaritalStatus,1,2);
添加(tfIncome,1,0);
tfHrlyWage.setPrefColumnCount(4);
tfHrsPerWeek.setPrefColumnCount(3);
tfMaritalStatus.setPrefColumnCount(7);
tfIncome.setPrefColumnCount(7);
场景=新场景(窗格,250150);
primaryStage.setTitle(“税务计算器”);
初级阶段。场景(场景);
primaryStage.show();
字符串MaritalStatus;//用于确定联邦所得税等级
//System.out.println(“请输入您的小时工资:”);
t1.HrlyWage=Double.parseDouble(tfHrlyWage.getText());//小时年龄输入
//System.out.println(“请输入您每周的工作时间:”;
t1.HrsPerWeek=Double.parseDouble(tfHrsPerWeek.getText());
MaritalStatus=tfMaritalStatus.getText();
btCalculate.setOnAction(e->System.out.println(“扣除联邦和州所得税后的年收入为$”+f1.YearlyTakeHome));

启动
方法只是简单地设置GUI。没有什么能让代码像带有扫描仪的控制台程序那样等待用户输入

JavaFX是基于事件的,您应该找到一些事件/属性来添加事件处理程序/侦听器,并对事件/更改做出反应

如果您希望自动更新文本字段内容更改的结果,则这可以是
TextField
s的
text
属性的侦听器

//t1.HrlyWage = Double.parseDouble(tfHrlyWage.getText());
//t1.HrsPerWeek = Double.parseDouble(tfHrsPerWeek.getText());

InvalidationListener listener = o -> {

    try {
        t1.HrlyWage = Double.parseDouble(tfHrlyWage.getText());
        t1.HrsPerWeek = Double.parseDouble(tfHrsPerWeek.getText());

        // TODO: some output???
    } catch (NumberFormatException ex) {
        // TODO: output error message???
    }

};

tfHrlyWage.textProperty().addListener(listener);
tfHrsPerWeek.textProperty().addListener(listener);
或从侦听器到按钮事件处理程序:

//t1.HrlyWage = Double.parseDouble(tfHrlyWage.getText());
//t1.HrsPerWeek = Double.parseDouble(tfHrsPerWeek.getText());

btCalculate.setOnAction(e -> {
    try {
        t1.HrlyWage = Double.parseDouble(tfHrlyWage.getText());
        t1.HrsPerWeek = Double.parseDouble(tfHrsPerWeek.getText());
        // TODO: use properties for some calculations???
    } catch (NumberFormatException ex) {
        // TODO: display error message???
    }

    System.out.println("Your Yearly Income After Federal and State Income Taxes is $" + f1.YearlyTakeHome);
});

t1.HrlyWage=Double.parseDouble(tfHrlyWage.getText());//HourlyWage Input
这在
C++
C#
中可能是一个很好的编程,但在
Java
@Andrew中它不存在。如果post解决了您的问题,请接受它作为正确答案。