1

I am trying to populate a JavaFX TableView with data from a database and I'm getting this error I cant resolve, or find an asnwer to online.

I have a couple of projects worked on JDK 8 and I never got this error doing a similar task but my most recent project with JDK 9 gives me this error, not sure where the issue is here. The code of the 2 projects is EXACTLY the same.

Also I would like to point out, this code successfully retreives data from the database, but the error comes in when displaying them on the table.

CODE

fxml:

<TableView fx:id="table" layoutX="46.0" layoutY="83.0" prefHeight="458.0" prefWidth="680.0">
               <columns>
                  <TableColumn fx:id="column_code" prefWidth="100" text="Item Code" />
                  <TableColumn fx:id="column_name" prefWidth="200" text="Item Name" />
                  <TableColumn fx:id="column_date" prefWidth="100" text="Order Date" />
                  <TableColumn fx:id="column_quantity" prefWidth="80" text="Quantity" />
                  <TableColumn fx:id="column_cost" prefWidth="100" text="Order Cost" />
                  <TableColumn fx:id="column_status" prefWidth="100" text="Order Status" />
               </columns>
            </TableView>

controller:

public class StockController implements Initializable {

    static Connection con = null;
    static PreparedStatement pst = null;
    static Statement stmt = null;
    static ResultSet rs;
    private ObservableList<Stock> data


    @FXML private TableView<Stock> table;
    @FXML private TableColumn<?, ?> column_code;
    @FXML private TableColumn<?, ?> column_name;
    @FXML private TableColumn<?, ?> column_date;
    @FXML private TableColumn<?, ?> column_quantity;
    @FXML private TableColumn<?, ?> column_cost;
    @FXML private TableColumn<?, ?> column_status;

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

        con = sample.Database.DBConnection.makeConnection();
        data = FXCollections.observableArrayList();

        try{
            stmt = con.createStatement();
        } catch (Exception e){
            System.out.println("error connecting to db");
        }

        setCellTable();
        loadDataFromDB();
    }

    public void setCellTable(){
        column_code.setCellValueFactory(new PropertyValueFactory<>("itemCode"));
        column_name.setCellValueFactory(new PropertyValueFactory<>("itemName"));
        column_date.setCellValueFactory(new PropertyValueFactory<>("orderDate"));
        column_quantity.setCellValueFactory(new PropertyValueFactory<>("orderQuantity"));
        column_cost.setCellValueFactory(new PropertyValueFactory<>("orderCost"));
        column_status.setCellValueFactory(new PropertyValueFactory<>("orderStatus"));
    }

    public void loadDataFromDB(){
        try {
            String q1 = "SELECT * FROM products";

            String query = "SELECT products.itemCode, products.itemName, stock.orderDate, stock.orderedQuantity, products.itemCost, stock.orderStatus " +
                    "FROM products, stock";

            pst = con.prepareStatement(query);
            rs = pst.executeQuery();

            while (rs.next()){
                data.add(new Stock(rs.getString(1), rs.getString(2), rs.getString(3),
                        rs.getString(4), rs.getString(5), rs.getString(6)));

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        table.setItems(data);
    }

}

Stock class:

public class Stock {

    private String itemCode;
    private String itemName;
    private String orderDate;
    private String orderQuantity;
    private String orderCost;
    private String orderStatus;

    public Stock(String itemCode, String itemName, String orderDate, String orderQuantity, String orderCost, String orderStatus) {
        this.itemCode = itemCode;
        this.itemName = itemName;
        this.orderDate = orderDate;
        this.orderQuantity = orderQuantity;
        this.orderCost = orderCost;
        this.orderStatus = orderStatus;
    }

    public String getitemCode() {
        return itemCode;
    }

    public void setitemCode(String itemCode) {
        this.itemCode = itemCode;
    }

    public String getitemName() {
        return itemName;
    }

    public void setitemName(String itemName) {
        this.itemName = itemName;
    }

    public String getorderDate() {
        return orderDate;
    }

    public void setorderDate(String orderDate) {
        this.orderDate = orderDate;
    }

    public String getorderQuantity() {
        return orderQuantity;
    }

    public void setorderQuantity(String orderQuantity) {
        this.orderQuantity = orderQuantity;
    }

    public String getorderCost() {
        return orderCost;
    }

    public void setorderCost(String orderCost) {
        this.orderCost = orderCost;
    }

    public String getorderStatus() {
        return orderStatus;
    }

    public void setorderStatus(String orderStatus) {
        this.orderStatus = orderStatus;
    }

}

error: (I get this message for all properties, so I just copied one here)

Oct 22, 2017 8:03:00 PM javafx.scene.control.cell.PropertyValueFactory getCellDataReflectively
WARNING: Can not retrieve property 'itemCode' in PropertyValueFactory: javafx.scene.control.cell.PropertyValueFactory@fe29770 with provided class type: class sample.Stock.Stock
java.lang.IllegalStateException: Cannot read from unreadable property itemCode
    at javafx.base/com.sun.javafx.property.PropertyReference.get(PropertyReference.java:170)
    at javafx.controls/javafx.scene.control.cell.PropertyValueFactory.getCellDataReflectively(PropertyValueFactory.java:184)
    at javafx.controls/javafx.scene.control.cell.PropertyValueFactory.call(PropertyValueFactory.java:154)
    at javafx.controls/javafx.scene.control.cell.PropertyValueFactory.call(PropertyValueFactory.java:133)
    at javafx.controls/javafx.scene.control.TableColumn.getCellObservableValue(TableColumn.java:593)
    at javafx.controls/javafx.scene.control.TableColumn.getCellObservableValue(TableColumn.java:578)
    at javafx.controls/javafx.scene.control.TableCell.updateItem(TableCell.java:646)
    at javafx.controls/javafx.scene.control.TableCell.indexChanged(TableCell.java:469)
    at javafx.controls/javafx.scene.control.IndexedCell.updateIndex(IndexedCell.java:120)
    at javafx.controls/javafx.scene.control.skin.TableRowSkinBase.updateCells(TableRowSkinBase.java:539)
    at javafx.controls/javafx.scene.control.skin.TableRowSkinBase.<init>(TableRowSkinBase.java:159)
    at javafx.controls/javafx.scene.control.skin.TableRowSkin.<init>(TableRowSkin.java:89)
    at javafx.controls/javafx.scene.control.TableRow.createDefaultSkin(TableRow.java:213)
    at javafx.controls/javafx.scene.control.Control.doProcessCSS(Control.java:897)
    at javafx.controls/javafx.scene.control.Control.access$000(Control.java:83)
    at javafx.controls/javafx.scene.control.Control$1.doProcessCSS(Control.java:89)
    at javafx.controls/com.sun.javafx.scene.control.ControlHelper.processCSSImpl(ControlHelper.java:67)
    at javafx.graphics/com.sun.javafx.scene.NodeHelper.processCSS(NodeHelper.java:147)
    at javafx.graphics/javafx.scene.Node.processCSS(Node.java:9513)
    at javafx.graphics/javafx.scene.Node.applyCss(Node.java:9600)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.setCellIndex(VirtualFlow.java:1715)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.getCell(VirtualFlow.java:1692)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.getCellLength(VirtualFlow.java:1801)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.computeViewportOffset(VirtualFlow.java:2638)
    at javafx.controls/javafx.scene.control.skin.VirtualFlow.layoutChildren(VirtualFlow.java:1245)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1226)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Parent.layout(Parent.java:1233)
    at javafx.graphics/javafx.scene.Scene.doLayoutPass(Scene.java:590)
    at javafx.graphics/javafx.scene.Scene$ScenePulseListener.pulse(Scene.java:2507)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.lambda$runPulse$2(Toolkit.java:410)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.runPulse(Toolkit.java:409)
    at javafx.graphics/com.sun.javafx.tk.Toolkit.firePulse(Toolkit.java:436)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:518)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:498)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:491)
    at javafx.graphics/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:319)
    at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
    at java.base/java.lang.Thread.run(Thread.java:844)
Salman Fazal
  • 559
  • 7
  • 22

0 Answers0