Parsing 使用parse Double时,应用程序启动方法java.lang.reflect.InvocationTargetException中出现异常
因此,我试图让GUI为编程项目工作。这涉及到将其从一个简单的扫描函数更改为使用parse Double从文本字段转换用户输入。程序能够运行,但一旦我做了更改,它就会在标题中抛出异常,并在每次运行时终止程序。是的,我有一个主要的方法 以下是相关代码: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
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解决了您的问题,请接受它作为正确答案。