javafx由以下原因引起:java.lang.UnsupportedOperationException

javafx由以下原因引起:java.lang.UnsupportedOperationException,java,exception,javafx,javafx-8,unsupportedoperation,Java,Exception,Javafx,Javafx 8,Unsupportedoperation,当我尝试向数据库添加一个“对象”,然后将其显示给TableView时,它会显示UnsupportedOperationException。一切都很好,直到我将此代码添加到“public void initialize()”以使文本字段成为“searchbox”: clearTable(): addToTableFromDatabase(): addToDatabase(): 您已将表视图的支持列表(项)设置为排序列表,该列表不能直接修改(因为它总是假定为其基础列表的排序版本)。因此table.g

当我尝试向数据库添加一个“对象”,然后将其显示给TableView时,它会显示UnsupportedOperationException。一切都很好,直到我将此代码添加到“public void initialize()”以使文本字段成为“searchbox”:

clearTable():

addToTableFromDatabase():

addToDatabase():


您已将表视图的支持列表(
)设置为排序列表,该列表不能直接修改(因为它总是假定为其基础列表的排序版本)。因此
table.getItems()
返回
SortedList
table.getItems().clear()
尝试修改它并抛出异常

您应该修改基础列表,在第一个代码块中调用
data
。您没有显示代码块的任何上下文,因此不清楚该变量的范围是什么,但实际上您需要
data.clear()
,而不是
table.getItems().clear()


(另外,您不想在
addToTableFromDatabase
中的循环中调用
table.setItems(data)
,因为这将删除筛选和排序。)

您已将表视图的支持列表(
)设置为排序列表,不能直接修改(因为它总是被认为是其基础列表的排序版本)。因此
table.getItems()
返回
SortedList
table.getItems().clear()
尝试修改它并抛出异常

您应该修改基础列表,在第一个代码块中调用
data
。您没有显示代码块的任何上下文,因此不清楚该变量的范围,但您基本上需要
data.clear()
而不是
table.getItems().clear()

(另外,您不希望在
addToTableFromDatabase
中的循环中调用
table.setItems(data)
,因为这将删除筛选和排序。)

FilteredList <Paisjet> filteredData = new FilteredList<>(data,e -> true);

    paisjaSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
            {
                filteredData.setPredicate( paisjet -> 
                {
                    if(newValue == null || newValue.isEmpty())
                    {
                        return true;
                    }
                    String lowerCaseFilter = newValue.toLowerCase();
                    if(paisjet.getPaisja().toLowerCase().contains(lowerCaseFilter))
                    {
                        return true;
                    }
                    return false;
                });
            });
    kategoriaSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
            {
                filteredData.setPredicate( paisjet -> 
                {
                    if(newValue == null || newValue.isEmpty())
                    {
                        return true;
                    }
                    String lowerCaseFilter = newValue.toLowerCase();
                    if(paisjet.getKategoria().toLowerCase().contains(lowerCaseFilter))
                    {
                        return true;
                    }
                    return false;
                });
            });
    prodhuesiSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
            {
                filteredData.setPredicate( paisjet -> 
                {
                    if(newValue == null || newValue.isEmpty())
                    {
                        return true;
                    }
                    String lowerCaseFilter = newValue.toLowerCase();
                    if(paisjet.getProdhuesi().toLowerCase().contains(lowerCaseFilter))
                    {
                        return true;
                    }
                    return false;
                });
            });
    modeliSearch.textProperty().addListener((observableValue,oldValue,newValue) -> 
            {
                filteredData.setPredicate( paisjet -> 
                {
                    if(newValue == null || newValue.isEmpty())
                    {
                        return true;
                    }
                    String lowerCaseFilter = newValue.toLowerCase();
                    if(paisjet.getModeli().toLowerCase().contains(lowerCaseFilter))
                    {
                        return true;
                    }
                    return false;
                });
            });

    SortedList <Paisjet> sortedData = new SortedList<>(filteredData);
    sortedData.comparatorProperty().bind(tableView.comparatorProperty());
    tableView.setItems(sortedData);
Caused by: java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:161)
at java.util.AbstractList$Itr.remove(AbstractList.java:374)
at java.util.AbstractList.removeRange(AbstractList.java:571)
at java.util.AbstractList.clear(AbstractList.java:234)
at main.MainWindowController.clearTable(MainWindowController.java:315)
at main.MainWindowController.addToTableFromDatabase(MainWindowController.java:320)
at main.MainWindowController.addToDatabase(MainWindowController.java:309)
... 61 more
public void clearTable()
{
    tableView.getItems().clear(); // line 315 at OUTPUT ERROR
}
public void addToTableFromDatabase() throws ClassNotFoundException, SQLException
{
    clearTable();  //line 320 at OUTPUT ERROR
    Class.forName("com.mysql.jdbc.Driver");
    String url="jdbc:mysql://***.***.**.*:****/*********";
    String uname="*****";
    String pass="*********";
    connect = (Connection) DriverManager.getConnection(url,uname,pass);

    Statement statement;
    String query = "SELECT * FROM paisjettable" ;
    statement = connect.createStatement();
    ResultSet rs = statement.executeQuery(query);

    while(rs.next())
    {

        int id = rs.getInt("id");
        String prodhuesi = rs.getString("prodhuesi");
        String modeli = rs.getString("modeli");
        String paisja = rs.getString("paisja");
        String pjesa = rs.getString("pjesa");
        String infoshtese = rs.getString("infoshtese");
        double qmimi = rs.getDouble("qmimi");
        double punedore = rs.getDouble("punedore");
        double pagesa = rs.getDouble("pagesa");
        int sasia = rs.getInt("sasia");

        paisjet = new Paisjet(id,prodhuesi,modeli,paisja,pjesa,qmimi,punedore,pagesa,sasia,infoshtese);
        data.add(paisjet);
        tableView.setItems(data);
    }

    rs.close();
    connect.close();
}
public void addToDatabase() throws ClassNotFoundException, SQLException
{
    addToDatabaseMethod(count,prodhuesiField.getText(),modeliField.getText(),paisjaField.getText(),pjesaField.getText(),Double.parseDouble(qmimiField.getText()),Double.parseDouble(puneDoreField.getText()),Integer.parseInt(sasiaField.getText()),infoArea.getText());
    count++;
    prodhuesiField.clear();
    modeliField.clear();
    paisjaField.clear();
    pjesaField.clear();
    qmimiField.clear();
    puneDoreField.clear();
    sasiaField.clear();
    infoArea.clear();
    addToTableFromDatabase(); // line 309 from OUTPUT ERROR
}