控制器类中的初始化器不起作用

问题描述 投票:-2回答:1

因此,我编写了一个程序,其中有一个带有桌子的场景。我用数据填充表,并用数据填充每个表单元格。现在,我得到了这个错误,将我的程序单元格值工厂指向了我的程序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);
    }
}
java javafx javafx-8 javafx-tableview
1个回答
0
投票

问题是,在HOME.fxml中,fx:idTableViewTableView,而不是tableView(请注意T)。

而且我也不鼓励共享一个控制器同时使用多个fxml,因为initialize()应该在所有fxml中都找到相同的映射节点。

并且下次请仔细阅读错误消息并提供Minimal Reproducible Example

© www.soinside.com 2019 - 2024. All rights reserved.