Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 索引表中选定行的越界异常_Java_Mysql_Javafx_Indexoutofboundsexception - Fatal编程技术网

Java 索引表中选定行的越界异常

Java 索引表中选定行的越界异常,java,mysql,javafx,indexoutofboundsexception,Java,Mysql,Javafx,Indexoutofboundsexception,从表视图中选择行时出现索引越界异常。以下是我如何从数据库中获取数据: public List<Category> populateCategoryTable() { List ll = new LinkedList(); try { db.getConnection(); String sql = "SELECT * FROM sm_category"; ResultSet rs = null; //

从表视图中选择行时出现索引越界异常。以下是我如何从数据库中获取数据:

 public List<Category> populateCategoryTable() {
    List ll = new LinkedList();

    try {
        db.getConnection();
        String sql = "SELECT * FROM sm_category";
        ResultSet rs = null;
        // Call readRequest to get the result
        rs = db.readRequest(sql);

        while (rs.next()) {
            String ID = rs.getString("categoryID");
            String name = rs.getString("categoryName");
            String desc = rs.getString("categoryDescription");
            Category row = new Category();
            row.setid(ID);
            row.setname(name);
            row.setdesc(desc);
            ll.add(row);
        }
        rs.close();
    } catch (SQLException ex) {
        ex.printStackTrace();
        System.out.println("Error SQL!!!");
        System.exit(0);
    }
    return ll;
}
然而,在添加了所选行代码的垃圾之后,我得到了索引越界异常。错误消息是:

java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:208)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel$6.get(TableView.java:1757)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel$6.get(TableView.java:1755)
at shopManagement.boundary.RetrieveProductUI$1.onChanged(RetrieveProductUI.java:101)
at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:291)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
有人知道为什么会有索引越界异常吗?我的代码中没有红线


提前感谢。

您可以通过FXCollections创建ObservableList,如果您只使用table.getItems(),它将自动创建,因此usage table.getItems().setAll(…)很好,您可以使用调试器轻松验证这一点

以下代码应该有帮助:

while(change.next(){
    if(change.wasAdded()){
        TableView.TableViewSelectionModel selectionModel = viewCategory.getSelectionModel();
        ObservableList selectedCells = selectionModel.getSelectedCells();
        TablePosition tablePosition = (TablePosition) selectedCells.get(0);
        int row = tablePosition.getRow(); // yields the row that the currently selected cell is in
        System.out.println(row);
    }
}
您还可以更改此代码:

TableView.TableViewSelectionModel selectionModel = viewCategory.getSelectionModel();
ObservableList selectedCells = selectionModel.getSelectedCells();
与:

但是,如果您只想找到最后一行,可以使用:

UPD:

//viewCategory.getSelectionModel().setCellSelectionEnabled(true);
//viewCategory.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
viewCategory.getSelectionModel().selectedIndexProperty().addListener(新的ChangeListener()){
@凌驾

更改公众假期(ObservalEvalue请显示您的表结构。列的名称是什么?提供完整的stacktrace,其中包含您的类的详细信息,以便我们可以看到错误的确切点。我从数据库检索数据并将其显示在表中没有问题。错误仅在我选择表中的行时发生。我将注释掉该部分。请参阅我的updatescheck onchange函数中selectedCell的大小,我认为每当您选择一行并调用onchange时,列表中就没有selectedCell了。是的,它显示了[]在控制台中。那么我应该如何修复它?您的意思是在changeListener中添加if语句?以及从何处获取列表?因为我正在动态检索数据。我没有手动可观察列表来设置数据。如果遵循您的代码,我将获得IllegalStateException@Carol,将在更改时获取事件目标列表。getList()calling.ObservableList是由TableView创建的,但我不确定何时创建实例,或者在第一次调用getItems()时延迟。但我得到了IllegalStateException。你知道为什么吗?但它不应该只获取所选行的第一列值吗?我们需要添加新元素吗?尝试添加其他代码:while(change.next()){\\code from post}对不起,忘记了初始状态。
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:604)
at java.util.ArrayList.get(ArrayList.java:382)
at com.sun.javafx.collections.ObservableListWrapper.get(ObservableListWrapper.java:208)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel$6.get(TableView.java:1757)
at javafx.scene.control.TableView$TableViewArrayListSelectionModel$6.get(TableView.java:1755)
at shopManagement.boundary.RetrieveProductUI$1.onChanged(RetrieveProductUI.java:101)
at com.sun.javafx.collections.ListListenerHelper$Generic.fireValueChangedEvent(ListListenerHelper.java:291)
at com.sun.javafx.collections.ListListenerHelper.fireValueChangedEvent(ListListenerHelper.java:48)
while(change.next(){
    if(change.wasAdded()){
        TableView.TableViewSelectionModel selectionModel = viewCategory.getSelectionModel();
        ObservableList selectedCells = selectionModel.getSelectedCells();
        TablePosition tablePosition = (TablePosition) selectedCells.get(0);
        int row = tablePosition.getRow(); // yields the row that the currently selected cell is in
        System.out.println(row);
    }
}
TableView.TableViewSelectionModel selectionModel = viewCategory.getSelectionModel();
ObservableList selectedCells = selectionModel.getSelectedCells();
ObservableList selectedCells = change.getList();
    //viewCategory.getSelectionModel().setCellSelectionEnabled(true);
    //viewCategory.getSelectionModel().setSelectionMode(SelectionMode.MULTIPLE);
    viewCategory.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
                @Override
                public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number1) {
                    if ((Integer) number1 >= 0) {
                        Category cat = (Category) table.getItems().get(number1);
                        String id = cat.getid();
                        \\here you can fetch DB for aditional info and pass it somewhere
                    } 
                }
            });