因此,我编写了一个程序,其中有一个带有桌子的场景。我用数据填充表,并用数据填充每个表单元格。现在,我得到了这个错误,将我的程序单元格值工厂指向了我的程序ID。我的ID,方法是否有问题,或者初始化器中缺少我缺少的东西?
错误
/Library/Java/JavaVirtualMachines/jdk-13.0.2.jdk/Contents/Home/bin/java --module-path /Users/anish/Desktop/javafx-sdk-13.0.2/lib --add-modules javafx.controls,javafx.fxml --add-modules javafx.base,javafx.graphics --add-reads javafx.base=ALL-UNNAMED --add-reads javafx.graphics=ALL-UNNAMED -Djava.library.path=/Users/anish/Desktop/javafx-sdk-13.0.2/lib "-javaagent:/Applications/IntelliJ IDEA CE.app/Contents/lib/idea_rt.jar=59153:/Applications/IntelliJ IDEA CE.app/Contents/bin" -Dfile.encoding=UTF-8 -classpath /Users/anish/IdeaProjects/FBLA2020CompetitionCode/out/production/FBLA2020CompetitionCode:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx-swt.jar:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx.web.jar:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx.base.jar:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx.fxml.jar:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx.media.jar:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx.swing.jar:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx.controls.jar:/Users/anish/Desktop/javafx-sdk-13.0.2/lib/javafx.graphics.jar sample.Main
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:567)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:830)
Caused by: javafx.fxml.LoadException:
/Users/anish/IdeaProjects/FBLA2020CompetitionCode/out/production/FBLA2020CompetitionCode/sample/HOME.fxml
at javafx.fxml/javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2625)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2603)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2466)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3237)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3194)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3163)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3136)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3113)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3106)
at sample.Main.start(Main.java:13)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
Caused by: java.lang.NullPointerException
at sample.Controller.initialize(Controller.java:114)
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2573)
... 14 more
Exception running application sample.Main
Process finished with exit code 1
controller.java
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
//package sample
package sample;
//IMPORTS FROM JAVAFX
import java.io.IOException;
import java.lang.reflect.Array;
import java.net.URL;
import java.time.LocalDate;
import java.time.Month;
import java.util.ArrayList;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.stage.Stage;
//Controller class header
public class Controller implements Initializable {
@FXML private TableView<person> tableView;
@FXML private TableColumn<person, String> student;
@FXML private TableColumn<person, Integer> ID;
@FXML private TableColumn<person, Integer> grade;
@FXML private TableColumn<person, Integer> hours;
@FXML private TableColumn<person, String> awards;
@FXML private TableColumn<person, String> program;
@FXML private TableColumn<person, LocalDate> date;
//Randomizer
private ArrayList<String> names = new ArrayList<String>();
private ArrayList<Integer> IDRandom = new ArrayList<>();
private ArrayList<String> awardRandom = new ArrayList<>();
private ArrayList<String> programRandom = new ArrayList<String>();
public Controller(){
names.add("Taneka");
names.add("Abby");
names.add("Chieko");
names.add("Sherie");
names.add("Jamie");
names.add("Bob");
names.add("Deja");
names.add("Newton");
names.add("James Charles");
names.add("Charli");
names.add("Christiana");
names.add( "Kaylee");
names.add("Jeff");
names.add("Rex");
names.add("Will");
names.add("Mee");
names.add("Mohamed");
names.add("Tamica");
names.add("Brandon");
names.add("Carl");
programRandom.add("Openlane");
programRandom.add("Yearin");
programRandom.add("Goodsilron");
programRandom.add("Condax");
programRandom.add("Opentech");
programRandom.add("Golddex");
programRandom.add("year-job");
programRandom.add("Isdom");
programRandom.add("Gogozoom");
programRandom.add("Y-corporation");
programRandom.add("Nam-zim");
programRandom.add("Donquadtech");
programRandom.add("Warephase");
programRandom.add("Donware");
programRandom.add("Faxquote");
programRandom.add("Sunnamplex");
programRandom.add("Lexiqvolax");
programRandom.add("Sumace");
programRandom.add("Treequote");
programRandom.add("Iselectrics");
programRandom.add("Zencorporation");
programRandom.add("Plusstrip");
}
//loads the HomePage. Uses #homePane
public void loadHome(ActionEvent event) throws IOException{
Parent view2 = FXMLLoader.load(getClass().getResource("HOME.fxml"));
Scene scene2 = new Scene(view2);
Stage window = (Stage)((Node)event.getSource()).getScene().getWindow();
window.setScene(scene2);
window.show();
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
student.setCellValueFactory(new PropertyValueFactory<person, String>("Student"));
ID.setCellValueFactory(new PropertyValueFactory<person, Integer>("ID"));
hours.setCellValueFactory(new PropertyValueFactory<person, Integer>("Hours"));
program.setCellValueFactory(new PropertyValueFactory<person, String>("Program"));
date.setCellValueFactory(new PropertyValueFactory<person, LocalDate>("Date"));
awards.setCellValueFactory(new PropertyValueFactory<person, String>("Awards"));
tableView.setItems(getPeople());
}
public static int randomIntegerBetween(int start, int end) {
return start + (int) Math.round(Math.random() * (end - start));
}
public static LocalDate createRandomDate(int startYear, int endYear) {
int day = randomIntegerBetween(1, 28);
int month = randomIntegerBetween(1, 12);
int year = randomIntegerBetween(startYear, endYear);
return LocalDate.of(year, month, day);
}
public String stringRandomizer(ArrayList<String> list){
int index = (int)(Math.random()*list.size());
return list.get(index);
}
public ObservableList<person> getPeople(){
ObservableList<person> people = FXCollections.observableArrayList();
LocalDate randomDate = createRandomDate(2010,2021);
String randomName = stringRandomizer(names);
int randomID = randomIntegerBetween(100000000,999999999);
String randomProgram = stringRandomizer(programRandom);
int randomHour = randomIntegerBetween(0,10);
String tempName = randomName;
int tempID = randomID;
int increment = randomIntegerBetween(5,12);
int num = increment;
for(int i = 0; i < num; i++) {
tempName = randomName;
tempID = randomID;
for (int j = 0; j < num; j++) {
people.add(new person(tempName, tempID, randomHour, randomProgram, randomDate));
}
}
return people;
}
public void loadEdit(ActionEvent actionEvent) throws IOException{
Parent view2 = FXMLLoader.load(getClass().getResource("Edit.fxml"));
Scene scene2 = new Scene(view2);
Stage window = (Stage)((Node)actionEvent.getSource()).getScene().getWindow();
window.setScene(scene2);
window.show();
}
public void searchStudent(ActionEvent actionEvent) {
}
public void editPopup(ActionEvent actionEvent) {
}
public void loadInstructions(ActionEvent actionEvent) throws IOException{
}
}
场景edit.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.effect.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.text.*?>
<AnchorPane fx:id="studentPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="576.0" prefWidth="1050.0" style="-fx-background-color: #02030A;" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<VBox alignment="TOP_CENTER" prefHeight="576.0" prefWidth="256.0" style="-fx-background-color: #3282b8#3282b8;" AnchorPane.bottomAnchor="0.0" AnchorPane.topAnchor="0.0">
<children>
<ImageView fitHeight="265.0" fitWidth="255.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../images/Flag-color.png" />
</image>
<VBox.margin>
<Insets bottom="10.0" top="50.0" />
</VBox.margin></ImageView>
<Label text="FBLA/PBL Volunteer Portal" textFill="#e7e5e5">
<VBox.margin>
<Insets bottom="20.0" />
</VBox.margin>
<font>
<Font name="System Bold" size="16.0" />
</font>
</Label>
<Button fx:id="homeButton" alignment="BASELINE_LEFT" graphicTextGap="22.0" mnemonicParsing="false" onAction="#loadHome" prefHeight="80.0" prefWidth="256.0" style="-fx-background-color: #3282b8#3282b8;" text="Home" textFill="WHITE">
<graphic>
<ImageView fitHeight="23.0" fitWidth="27.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../images/icons8_Home_32px.png" />
</image>
</ImageView>
</graphic>
<opaqueInsets>
<Insets />
</opaqueInsets>
<VBox.margin>
<Insets />
</VBox.margin>
<padding>
<Insets left="50.0" />
</padding>
</Button>
<Button fx:id="editButton" alignment="BASELINE_LEFT" graphicTextGap="22.0" mnemonicParsing="false" onAction="#loadEdit" prefHeight="80.0" prefWidth="256.0" style="-fx-background-color: #3282b8#3282b8;" text="Edit" textFill="WHITE">
<graphic>
<ImageView fitHeight="23.0" fitWidth="27.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../images/icons8_Slider__32px.png" />
</image>
</ImageView>
</graphic>
<padding>
<Insets left="50.0" />
</padding>
</Button>
<Button fx:id="printButton" alignment="BASELINE_LEFT" graphicTextGap="22.0" mnemonicParsing="false" prefHeight="80.0" prefWidth="256.0" style="-fx-background-color: #3282b8#3282b8;" text="Print" textFill="WHITE">
<graphic>
<ImageView fitHeight="23.0" fitWidth="27.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../images/icons8_Open_Envelope_32px.png" />
</image>
</ImageView>
</graphic>
<padding>
<Insets left="50.0" />
</padding>
</Button>
<Button fx:id="printButton1" alignment="BASELINE_LEFT" graphicTextGap="22.0" layoutX="10.0" layoutY="445.0" mnemonicParsing="false" prefHeight="80.0" prefWidth="256.0" style="-fx-background-color: #3282b8#3282b8;" text="Print" textFill="WHITE">
<graphic>
<ImageView fitHeight="23.0" fitWidth="27.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../images/icons8_Open_Envelope_32px.png" />
</image>
</ImageView>
</graphic>
<padding>
<Insets left="50.0" />
</padding>
</Button>
</children>
</VBox>
<StackPane layoutX="258.0" prefHeight="576.0" prefWidth="793.0" style="-fx-background-color: #02030A;">
<children>
<Pane prefHeight="200.0" prefWidth="200.0" />
<Pane prefHeight="200.0" prefWidth="200.0" />
<Pane prefHeight="554.0" prefWidth="793.0" style="-fx-background-color: #1b262c#1b262c;">
<children>
<Label layoutX="45.0" layoutY="25.0" prefHeight="29.0" prefWidth="166.0" text="Edit/Import" textFill="#e7e5e5">
<font>
<Font size="24.0" />
</font>
</Label>
<HBox alignment="CENTER_LEFT" layoutX="15.0" layoutY="72.0" prefHeight="144.0" prefWidth="746.0" spacing="50.0">
<children>
<VBox alignment="CENTER" prefHeight="200.0" prefWidth="100.0">
<children>
<Label text="TOOLBOX:" textFill="WHITE">
<font>
<Font name="System Bold" size="20.0" />
</font>
</Label>
<Region prefHeight="75.0" prefWidth="100.0" />
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="161.0" prefWidth="148.0">
<children>
<Button fx:id="instructionButton" mnemonicParsing="false" onAction="#loadInstructions" prefHeight="27.0" prefWidth="124.0" style="-fx-background-color: #2a73ff#2a73ff;" text="Instructions" />
<Label textFill="#e7e5e5" />
<TextField fx:id="searchStudent" onAction="#searchStudent" prefHeight="44.0" prefWidth="140.0" promptText="Search Students" style="-fx-background-color: #1b262c#1b262c; -fx-border-color: #B7C3D7; -fx-border-radius: 2em;" />
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="92.0" prefWidth="98.0">
<children>
<Button fx:id="editButton0" mnemonicParsing="false" onAction="#editPopup" prefHeight="27.0" prefWidth="90.0" style="-fx-background-color: #fa5f7e#fa5f7e;" text="Edit" />
<Label prefHeight="20.0" prefWidth="100.0" textFill="#e7e5e5" textOverrun="CLIP" />
<Label text="Edit Options:" textFill="WHITE" />
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="144.0" prefWidth="97.0">
<children>
<MenuButton mnemonicParsing="false" style="-fx-background-color: #26bfbc#26bfbc #26bfbc#26bfbc;" text="Students">
<items>
<MenuItem mnemonicParsing="false" text="Action 1" />
<MenuItem mnemonicParsing="false" text="Action 2" />
</items>
</MenuButton>
<Label prefHeight="20.0" prefWidth="100.0" textFill="#e7e5e5" textOverrun="CLIP" />
<Label text="Select Student" textFill="WHITE" />
</children>
</VBox>
<VBox alignment="CENTER" prefHeight="144.0" prefWidth="120.0">
<children>
<Label text="N/A" textFill="#de0000">
<font>
<Font name="System Bold" size="26.0" />
</font>
</Label>
<Label prefHeight="17.0" prefWidth="107.0" text=" # of Hours Done" textFill="#e7e5e5" textOverrun="CLIP" />
</children>
</VBox>
</children>
</HBox>
<ScrollPane layoutX="14.0" layoutY="232.0" prefHeight="320.0" prefWidth="746.0">
<content>
<VBox prefHeight="318.0" prefWidth="744.0" spacing="5.0" style="-fx-background-color: #02030A;">
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
<children>
<TableView fx:id="tableView" prefHeight="315.0" prefWidth="734.0" style="-fx-background-color: #1b262c#1b262c #1b262c#1b262c;">
<columns>
<TableColumn fx:id="student" prefWidth="75.0" text="Student" />
<TableColumn fx:id="ID" prefWidth="75.0" text="ID" />
<TableColumn fx:id="grade" prefWidth="75.0" text="Grade" />
<TableColumn fx:id="hours" prefWidth="75.0" text="Hours" />
<TableColumn fx:id="Program" prefWidth="75.0" text="Program" />
<TableColumn fx:id="date" prefWidth="75.0" text="Date" />
</columns>
<columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
</children>
</VBox>
</content>
</ScrollPane>
</children>
</Pane>
</children>
</StackPane>
</children>
<effect>
<DropShadow color="#1b1eeb" />
</effect>
</AnchorPane>
编辑:我忘了人类
package sample;
import javafx.beans.property.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
public class person {
private StringProperty name, program;
private StringProperty awards;
private IntegerProperty grade,iD,hours;
private LocalDate date;
public person(String name, String awards, int grade, int iD, int hours) {
this.name = new SimpleStringProperty(name);
this.awards = new SimpleStringProperty(awards);
this.grade = new SimpleIntegerProperty(grade);
this.iD = new SimpleIntegerProperty(iD);
this.hours = new SimpleIntegerProperty(hours);
}
public person(String name, String awards, int grade, int iD, int hours, String program, LocalDate date) {
this.name = new SimpleStringProperty(name);
this.awards = new SimpleStringProperty(awards);
this.grade = new SimpleIntegerProperty(grade);
this.iD = new SimpleIntegerProperty(iD);
this.hours = new SimpleIntegerProperty(hours);
this.date = date;
this.program = new SimpleStringProperty(program);
}
public person(String name, int iD, int hours, String program, LocalDate date) {
this.name = new SimpleStringProperty(name);
this.iD = new SimpleIntegerProperty(iD);
this.hours = new SimpleIntegerProperty(hours);
this.date = date;
this.program = new SimpleStringProperty(program);
}
public String getProgram() {
return program.get();
}
public StringProperty programProperty() {
return program;
}
public void setProgram(String program) {
this.program.set(program);
}
public LocalDate getDate() {
return date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public String getName() {
return name.get();
}
public StringProperty nameProperty() {
return name;
}
public void setName(String name) {
this.name.set(name);
}
public String getAwards() {
return awards.get();
}
public StringProperty awardsProperty() {
return awards;
}
public void setAwards(String awards) {
this.awards.set(awards);
}
public int getGrade() {
return grade.get();
}
public IntegerProperty gradeProperty() {
return grade;
}
public void setGrade(int grade) {
this.grade.set(grade);
}
public int getiD() {
return iD.get();
}
public IntegerProperty iDProperty() {
return iD;
}
public void setiD(int iD) {
this.iD.set(iD);
}
public int getHours() {
return hours.get();
}
public IntegerProperty hoursProperty() {
return hours;
}
public void setHours(int hours) {
this.hours.set(hours);
}
}
问题是,在HOME.fxml
中,fx:id
的TableView
是TableView
,而不是tableView
(请注意T)。
而且我也不鼓励共享一个控制器同时使用多个fxml
,因为initialize()
应该在所有fxml
中都找到相同的映射节点。
并且下次请仔细阅读错误消息并提供Minimal Reproducible Example