Javafx应用程序不会只运行构建,构建失败
我目前正在开发一个计算每月贷款支付的应用程序。我从我的其他程序中提取代码来制作我想要的东西,我相信我拥有执行它所需的一切,但是构建失败了,我不知道为什么。Javafx是我的新手,所以我非常希望了解更多关于它的信息,但可以用一些方法来纠正我的错误 我试着用以前的程序一行一行地运行,但是没有看到任何差异,所以不确定为什么会出现错误。还有一个同学看了帮我调试Javafx应用程序不会只运行构建,构建失败,java,javafx,Java,Javafx,我目前正在开发一个计算每月贷款支付的应用程序。我从我的其他程序中提取代码来制作我想要的东西,我相信我拥有执行它所需的一切,但是构建失败了,我不知道为什么。Javafx是我的新手,所以我非常希望了解更多关于它的信息,但可以用一些方法来纠正我的错误 我试着用以前的程序一行一行地运行,但是没有看到任何差异,所以不确定为什么会出现错误。还有一个同学看了帮我调试 package project2a; import javafx.application.Application; import javaf
package project2a;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.HPos;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.RadioButton;
import javafx.scene.control.ToggleGroup;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.control.TitledPane;
import javafx.scene.layout.VBox;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
/**
*
* @author Carmine , Eric , Rohit
*/
public class Project2a extends Application {
//Text fields for loan amount
TextField tfLoanAmount = new TextField();
TextField tfInterestRate= new TextField();
TextArea textArea = new TextArea();
//Radio buttons for years
private RadioButton rbOneYear;
private RadioButton rbTwoYear;
private RadioButton rbFiveYear;
private RadioButton rbSevenYear;
private RadioButton rbTenYear;
private RadioButton rbFifteenYear;
private ToggleGroup group;
private Button btnCalculate;
//labels for output
private Label lblMonthlyPayment;
private Label lblHeader;
private Label lblYears;
//vbox for layout of items
private VBox vBoxRadio;
private VBox vBoxInputs;
private VBox vBoxResults;
private TitledPane titledPaneRadio;
@Override
public void start(Stage primaryStage)
{
//makes header
lblHeader= new Label("Calculate your monthly loan payment!");
lblHeader.setMinWidth(350);
lblHeader.setAlignment(Pos.CENTER);
lblHeader.setStyle("-fx-font-family: 'Comic Sans MS'; -fx-font-size: 28px; -fx-text-fill: white; -fx-background-color: rgb(104, 50, 0); -fx-font-weight: bold;");
EventHandler<ActionEvent> handler = event -> updateRates();
tfLoanAmount.setOnAction(handler);
tfInterestRate.setOnAction(handler);
TextField tfLoanAmount = new TextField();
rbOneYear= new RadioButton("One Years");
rbTwoYear= new RadioButton("Two Years");
rbFiveYear= new RadioButton("Five Years");
rbSevenYear= new RadioButton("Seven Years");
rbTenYear= new RadioButton("Ten Years");
rbFifteenYear= new RadioButton("Fifteen Years");
group = new ToggleGroup();
group.getToggles().addAll(rbOneYear, rbTwoYear, rbFiveYear, rbSevenYear, rbTenYear, rbFifteenYear);
rbFiveYear.setSelected(true);
vBoxRadio = new VBox(20,rbOneYear, rbTwoYear, rbFiveYear, rbSevenYear, rbTenYear, rbFifteenYear);
vBoxRadio.setPadding( new Insets(10) );
titledPaneRadio = new TitledPane("Number of Years", vBoxRadio);
vBoxInputs = new VBox(0, titledPaneRadio);
//creates calculate button
btnCalculate = new Button(" Calculate ");
btnCalculate.setStyle("-fx-text-fill: white; -fx-background-color: tan; -fx-font-weight: bold;");
btnCalculate.setOnAction( e -> calculateMonthlyPayment(e) );
lblYears= new Label("Number of Years: \t");
vBoxResults = new VBox(50, lblMonthlyPayment, btnCalculate);
vBoxResults.setPrefWidth(140);
vBoxResults.setPrefHeight(270);
vBoxResults.setPadding( new Insets(10) );
vBoxResults.setStyle("-fx-background-color: cornsilk; -fx-border-color: black; -fx-border-radius: 10;");
GridPane grid = new GridPane();
grid.addRow(0, lblHeader);
GridPane.setColumnSpan(lblHeader, 2);
GridPane.setHalignment(lblHeader, HPos.CENTER);
grid.addRow(1, vBoxInputs, vBoxResults);
Scene scene = new Scene(grid, 350, 310);
primaryStage.setTitle("Loan Payment Calculator");
primaryStage.setResizable(false);
primaryStage.setScene(scene);
primaryStage.show();
}
private void updateRates() {
double annualInterestRate = 5.00;
double loanAmount = Double.parseDouble(tfLoanAmount.getText());
double numberOfYears = Double.parseDouble(lblYears.getText());
String s = String.format("%-1s%20s%20s\n", "Interest Rate", "Monthly Payment", "Total Payment");
// making loop to display different interest rates
for ( ; annualInterestRate <= 8.00; annualInterestRate += 0.125) {
// calculating monthly and total payment rates
double monthlyInterestRate = annualInterestRate / 1200;
double monthlyPayment = loanAmount * monthlyInterestRate / (1 - 1 / Math.pow(1 + monthlyInterestRate, numberOfYears * 12));
double totalPayment = monthlyPayment * numberOfYears * 12;
// making % string for formatting reasons...
String str = "%";
// Displaying formatted info
s += String.format("%-1.3f%s%19.2f%30.2f \n", annualInterestRate, str, ((int) (monthlyPayment * 100) / 100.0), ((int) (totalPayment * 100) / 100.0));
}
textArea.setText(s);
}
private void calculateMonthlyPayment(ActionEvent e)
{
int years=0;
if(rbOneYear.isSelected())
{
years=1;
}
else if(rbTwoYear.isSelected())
{
years=2;
}
else if(rbFiveYear.isSelected())
{
years=5;
}
else if (rbSevenYear.isSelected())
{
years=7;
}
else if(rbTenYear.isSelected())
{
years=10;
}
else if(rbTenYear.isSelected())
{
years=10;
}
lblYears.setText("Year(s) Selected: " + years);
lblMonthlyPayment.setText("Monthly Payment: " );
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
packageproject2a;
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.event.EventHandler;
导入javafx.geometry.HPos;
导入javafx.geometry.Insets;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.RadioButton;
导入javafx.scene.control.ToggleGroup;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.TextArea;
导入javafx.scene.control.TextField;
导入javafx.scene.control.TitledPane;
导入javafx.scene.layout.VBox;
导入javafx.scene.layout.GridPane;
导入javafx.stage.stage;
/**
*
*@作者Carmine、Eric、Rohit
*/
公共类Project2a扩展了应用程序{
//贷款金额的文本字段
TextField tfLoanAmount=新的TextField();
TextField tfInterestRate=新TextField();
TextArea TextArea=新建TextArea();
//单选按钮多年
私家电台按钮;
私人无线电按钮两年;
私人无线电按钮,每年一次;
私人无线按钮七年;
私人无线按钮十年;
私人无线按钮,每两年一次;
私人交换组;
专用按钮BTN计算;
//输出标签
自有品牌LBL每月付款;
自有品牌lblHeader;
自有品牌lblYears;
//用于项目布局的vbox
私人VBox VBox收音机;
私有VBox vBoxInputs;
私有VBox vBoxResults;
私人所有权窗格所有权窗格;
@凌驾
公共无效开始(阶段primaryStage)
{
//做头球
lblHeader=新标签(“计算您的每月贷款付款!”);
lblHeader.setMinWidth(350);
LBL头设置对齐(位置中心);
lblHeader.setStyle(“-fx字体系列:'Comic Sans MS';-fx字体大小:28px;-fx文本填充:白色;-fx背景色:rgb(104,50,0);-fx字体重量:粗体;”;
EventHandler=event->updateRates();
tfLoanAmount.setOnAction(处理程序);
tfInterestRate.setOnAction(处理程序);
TextField tfLoanAmount=新的TextField();
rbOneYear=新单选按钮(“一年”);
rbTwoYear=新单选按钮(“两年”);
rbFiveYear=新单选按钮(“五年”);
rbSevenYear=新单选按钮(“七年”);
rbTenYear=新单选按钮(“十年”);
rbFifteenYear=新单选按钮(“十五年”);
组=新的切换组();
group.getToggles().addAll(rbOneYear、rbtwoneyear、rbFiveYear、rbSevenYear、rbTenYear、rbfifteeyear);
rbFiveYear.setSelected(true);
vBoxRadio=新的VBox(20,rbOneYear,rbTwoYear,rbFiveYear,rbSevenYear,rbTenYear,RBfifteeyear);
vBoxRadio.setPadding(新插图(10));
titledPaneRadio=新的TitledPane(“年数”,vBoxRadio);
vBoxInputs=新的VBox(0,标题为Paneradio);
//创建“计算”按钮
btnCalculate=新按钮(“计算”);
btnCalculate.setStyle(“-fx文本填充:白色;-fx背景颜色:棕褐色;-fx字体重量:粗体;”);
BTN计算设置操作(e->calculateMonthlyPayment(e));
lblYears=新标签(“年数:\t”);
vBoxResults=新的VBox(50磅,每月付款,BTN计算);
vBoxResults.setPrefWidth(140);
vBoxResults.setPrefHeight(270);
设置填充(新插入(10));
vBoxResults.setStyle(“-fx背景颜色:cornsilk;-fx边框颜色:黑色;-fx边框半径:10;”);
GridPane grid=新建GridPane();
grid.addRow(0,lblHeader);
GridPane.setColumnSpan(lblHeader,2);
GridPane.setHalignment(lblHeader,HPos.CENTER);
addRow(1,vBoxInputs,vBoxResults);
场景=新场景(网格,350,310);
primaryStage.setTitle(“贷款支付计算器”);
primaryStage.SetResizeable(假);
初级阶段。场景(场景);
primaryStage.show();
}
私有void updateRates(){
双年度利率=5.00;
double-loanAmount=double.parseDouble(tfLoanAmount.getText());
double numberOfYears=double.parseDouble(lblYears.getText());
String s=String.format(“%-1s%20s%20s\n”、“利率”、“月付款”、“总付款”);
//制作循环以显示不同的利率
对于(;AnnualInterestate异常正在抛出vBoxResults=新的VBox(50,lblMonthlyPayment,Btcalculate);
您的问题是将未初始化(null)lblMonthlyPayment
添加到VBox中,
因此,初始化lblMonthlyPayment
,这将修复您的应用程序,它将毫无问题地运行
请参阅下文
lblYears = new Label("Number of Years: \t");
lblMonthlyPayment = new Label("");
vBoxResults = new VBox(50, lblMonthlyPayment, btnCalculate);
你是个救命恩人谢谢你,我知道这一定是我在工作后错过的简单东西,只是在代码中迷失了方向