无法从数据库中填充Javafx表视图

无法从数据库中填充Javafx表视图,java,database,javafx,Java,Database,Javafx,我想向Javafx表中添加值 这些值存储在远程数据库中 从db(setAll(service.listReserveRung())中获取值的方法按预期工作。当我尝试运行以下代码以将值放入Javafx表时,我得到了一个完整的错误列表,第一个是空指针异常。 代码如下: public void listReserv() { try { AlleReservTable.getItems().setAll(service.listReservierung()); tableColu

我想向Javafx表中添加值

这些值存储在远程数据库中

从db(
setAll(service.listReserveRung()
)中获取值的方法按预期工作。当我尝试运行以下代码以将值放入Javafx表时,我得到了一个完整的错误列表,第一个是空指针异常。 代码如下:

public void listReserv() {
  try {

    AlleReservTable.getItems().setAll(service.listReservierung());

    tableColumnReservNr.setCellValueFactory(
             new PropertyValueFactory<Reservierung, Integer>("reservNr"));

    tableColumnReservName.setCellValueFactory(
             new PropertyValueFactory<Reservierung, String>("kundeName"));

    tableColumnReservVon.setCellValueFactory(
             new PropertyValueFactory<Reservierung, Timestamp>("von"));

    tableColumnReservBis.setCellValueFactory(
             new PropertyValueFactory<Reservierung, Timestamp>("bis"));

 } catch(Exception e) {
    e.printStackTrace();
 }
}
public void listReserv(){
试一试{
AlleReservTable.getItems().setAll(service.listReserveRung());
tableColumnReservNr.setCellValueFactory(
新物业价值工厂(“reservNr”);
tableColumnReservName.setCellValueFactory(
新地产价值工厂(“昆德纳姆”);
tableColumnReservVon.setCellValueFactory(
新物业价值工厂(“von”);
tableColumnReservBis.setCellValueFactory(
新物业价值工厂(“bis”);
}捕获(例外e){
e、 printStackTrace();
}
}

嘿,我为您做了一个工作示例,我使用了Java8的新日期时间API。 ReservationService不查询数据库,若要检查此情况,您必须发布服务类。此示例可能会对您有所帮助

FXML文件

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>

<AnchorPane fx:controller="de.professional_webworkx.reservationmanager.controller.MainController" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="768.0" prefWidth="1024.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1">
<children><TableView fx:id="reservationTable" prefHeight="768.0" prefWidth="1024.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" xmlns:fx="http://javafx.com/fxml">
  <columns>
    <TableColumn fx:id="resNumber" minWidth="250.0" prefWidth="250.0" text="ReservationID" />
    <TableColumn fx:id="customerName" minWidth="450.0" prefWidth="500.0" text="CustomerName" />
    <TableColumn fx:id="checkIn" minWidth="100.0" prefWidth="100.0" text="CheckIn" />
    <TableColumn fx:id="checkOut" minWidth="100.0" prefWidth="100.0" text="CheckOut" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" />
  </columns>
</TableView>
</children></AnchorPane>

主控制器

package de.professional_webworkx.reservationmanager.controller;

import de.professional_webworkx.reservationmanager.business.ReservationService;
import de.professional_webworkx.reservationmanager.model.Reservation;
import java.net.URL;
import java.time.LocalDateTime;
import java.util.List;
import java.util.ResourceBundle;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.StringProperty;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;

/**
 * Main FXML Controller
 * @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
 * @version 1.0
 */
public class MainController implements Initializable {

    @FXML
    TableView<Reservation> reservationTable;

    @FXML
    TableColumn<Reservation, Integer> resNumber;

    @FXML
    TableColumn<Reservation, String> customerName;

    @FXML
    TableColumn<Reservation, ObjectProperty<LocalDateTime>> checkIn;

    @FXML
    TableColumn<Reservation, ObjectProperty<LocalDateTime>> checkOut;

    @Override
    public void initialize(URL url, ResourceBundle rb) {

        ReservationService service = new ReservationService();
        List<Reservation> allReservations = service.getAllReservations();
        reservationTable.getItems().addAll(allReservations);
        resNumber.setCellValueFactory(new PropertyValueFactory<>("reserveNumber"));
        customerName.setCellValueFactory(new PropertyValueFactory<>("customerName"));
        checkIn.setCellValueFactory(new PropertyValueFactory<>("checkIn"));
        checkOut.setCellValueFactory(new PropertyValueFactory<>("checkOut"));
    }


}
package de.professional\u webworkx.reservationmanager.controller;
导入de.professional_webworkx.reservationmanager.business.ReservationService;
导入de.professional_webworkx.reservationmanager.model.Reservation;
导入java.net.URL;
导入java.time.LocalDateTime;
导入java.util.List;
导入java.util.ResourceBundle;
导入javafx.beans.property.ObjectProperty;
导入javafx.beans.property.StringProperty;
导入javafx.fxml.fxml;
导入javafx.fxml.Initializable;
导入javafx.scene.control.TableColumn;
导入javafx.scene.control.TableView;
导入javafx.scene.control.cell.PropertyValueFactory;
/**
*主FXML控制器
*@作者帕特里克·奥特
*@version 1.0
*/
公共类MainController实现可初始化{
@FXML
TableView reservationTable;
@FXML
表列编号;
@FXML
表列客户名称;
@FXML
表列签入;
@FXML
表列检验;
@凌驾
公共void初始化(URL、ResourceBundle rb){
ReservationService=新的ReservationService();
List allReservations=service.getAllReservations();
reservationTable.getItems().addAll(所有保留);
resNumber.setCellValueFactory(新属性ValueFactory(“reserveNumber”);
customerName.setCellValueFactory(新属性ValueFactory(“customerName”);
checkIn.setCellValueFactory(新属性ValueFactory(“checkIn”);
checkOut.setCellValueFactory(新属性ValueFactory(“checkOut”);
}
}
预订实体

package de.professional_webworkx.reservationmanager.model;

import java.time.LocalDate;
import java.util.Random;
import javafx.beans.property.IntegerProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;

/**
 * Reservation entity
 * @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
 * @version 1.0
 */
public class Reservation {

    private IntegerProperty reserveNumberProperty;
    private StringProperty customerNameProperty;

    private ObjectProperty<LocalDate> checkIn;
    private ObjectProperty<LocalDate> checkOut;

    public Reservation() {
        reserveNumberProperty   = new SimpleIntegerProperty(generateReservationNumber());
        customerNameProperty    = new SimpleStringProperty();
        checkIn                 = new SimpleObjectProperty<>();
        checkOut                = new SimpleObjectProperty<>();
    }

    public Reservation(final String customerName, final LocalDate checkIn, final LocalDate checkOut) {
        reserveNumberProperty   = new SimpleIntegerProperty(generateReservationNumber());
        customerNameProperty    = new SimpleStringProperty(customerName);
        this.checkIn            = new SimpleObjectProperty<>(checkIn);
        this.checkOut           = new SimpleObjectProperty<>(checkOut);
    }

    /**
     * @return the reserveNumberProperty
     */
    public IntegerProperty getReserveNumberProperty() {
        return reserveNumberProperty;
    }

    public Integer getReserveNumber() {
        return reserveNumberProperty.get();
    }

    /**
     * @param reserveNumberProperty the reserveNumberProperty to set
     */
    public void setReserveNumberProperty(IntegerProperty reserveNumberProperty) {
        this.reserveNumberProperty = reserveNumberProperty;
    }

    /**
     * @return the customerNameProperty
     */
    public StringProperty getCustomerNameProperty() {
        return customerNameProperty;
    }

    public String getCustomerName() {
        return customerNameProperty.get();
    }

    /**
     * @param customerNameProperty the customerNameProperty to set
     */
    public void setCustomerNameProperty(StringProperty customerNameProperty) {
        this.customerNameProperty = customerNameProperty;
    }

    /**
     * @return the checkIn
     */
    public ObjectProperty<LocalDate> getCheckInProperty() {
        return checkIn;
    }

    public LocalDate getCheckIn() {
        return checkIn.getValue();
    }

    /**
     * @param fromProperty the checkIn to set
     */
    public void setCheckInProperty(ObjectProperty<LocalDate> fromProperty) {
        this.checkIn = fromProperty;
    }

    /**
     * @return the checkOut
     */
    public ObjectProperty<LocalDate> getCheckOutProperty() {
        return checkOut;
    }

    public LocalDate getCheckOut() {
        return checkOut.getValue();
    }

    /**
     * @param toProperty the checkOut to set
     */
    public void setCheckOutProperty(ObjectProperty<LocalDate> toProperty) {
        this.checkOut = toProperty;
    }

    private Integer generateReservationNumber() {
        Random random = new Random();
        int nextInt = random.nextInt();
        return new Integer(nextInt);
    }
}
package de.professional\u webworkx.reservationmanager.model;
导入java.time.LocalDate;
导入java.util.Random;
导入javafx.beans.property.IntegerProperty;
导入javafx.beans.property.ObjectProperty;
导入javafx.beans.property.SimpleIntegerProperty;
导入javafx.beans.property.SimpleObject属性;
导入javafx.beans.property.SimpleStringProperty;
导入javafx.beans.property.StringProperty;
/**
*预订实体
*@作者帕特里克·奥特
*@version 1.0
*/
公务舱预订{
私有集成属性reserveNumberProperty;
私有财产客户财产;
私有对象属性签入;
私人财产结帐;
公众保留(){
reserveNumberProperty=新的SimpleIntegerProperty(generateReservationNumber());
customerNameProperty=新的SimpleStringProperty();
签入=新建SimpleObject属性();
checkOut=新的SimpleObject属性();
}
公共预订(最终字符串customerName、最终LocalDate签入、最终LocalDate签出){
reserveNumberProperty=新的SimpleIntegerProperty(generateReservationNumber());
customerName属性=新的SimpleStringProperty(customerName);
this.checkIn=新的SimpleObject属性(checkIn);
this.checkOut=新的SimpleObject属性(checkOut);
}
/**
*@返回reserveNumberProperty
*/
公共IntegerProperty getReserveNumberProperty(){
返回reserveNumberProperty;
}
公共整数getReserveNumber(){
返回reserveNumberProperty.get();
}
/**
*@param reserveNumberProperty要设置的reserveNumberProperty
*/
public void setReserveNumberProperty(IntegerProperty reserveNumberProperty){
this.reserveNumberProperty=reserveNumberProperty;
}
/**
*@返回CustomerName属性
*/
公共StringProperty getCustomerNameProperty(){
归还客户财产;
}
公共字符串getCustomerName(){
返回customerNameProperty.get();
}
/**
*@param customerNameProperty要设置的customerNameProperty
*/
public void setCustomerNameProperty(StringProperty customerNameProperty){
this.customerNameProperty=customerNameProperty;
}
/**
*@返回签入
*/
公共对象属性getCheckInProperty(){
返回签入;
}
public LocalDate getCheckIn(){
返回checkIn.getValue();
}
/**
*@param fromProperty要设置的签入
*/
public void setCheckInProperty(ObjectProperty fromProperty){
this.checkIn=fromProperty;
}
/**
*@退房
*/
公共对象属性getCheckOutProperty(){
退房;
}
public LocalDate getCheckOut(){
返回checkOut.getValue();
}
/**
*@param toProperty要设置的签出
*/
public void setCheckOutProperty(ObjectProperty toProperty){
this.checkOut=TopProperty;
}
专用整数生成器ServationNumber(){
package de.professional_webworkx.reservationmanager.business;

import de.professional_webworkx.reservationmanager.model.Reservation;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;

/**
 * ReservationService
 * persist, query, delete, edit Reservations
 * @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
 * @version 1.0
 */
public class ReservationService {

    public ReservationService() {
        super();
    }

    public List<Reservation> getAllReservations() {
        List<Reservation> reservations = new ArrayList<>();
        // fetch all reservations from database
        reservations.add(new Reservation("Patrick", LocalDate.now(), LocalDate.now().plusWeeks(3)));
        reservations.add(new Reservation("userXYZ", LocalDate.now(), LocalDate.now().plusWeeks(2)));
        return reservations;
    }
}
package de.professional_webworkx.reservationmanager;

import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author Patrick Ott <Patrick.Ott@professional-webworkx.de>
 */
public class ReservationManager extends Application {

    @Override
    public void start(Stage primaryStage) throws IOException {

        Parent parent = FXMLLoader.load(getClass().getResource("main.fxml"));

        Scene scene = new Scene(parent);

        primaryStage.setTitle("Hotel Reservation Manager v1.0");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}