Исключение в потоке "AWT-EventQueue-0" java .lang.ClassCastException: класс java .lang.Integer не может быть приведен к классу java .lang.String. - PullRequest
1 голос
/ 24 апреля 2020

Я записываю JTable данные в файл CSV с помощью OpenCSV jar. Все работает нормально, если только не происходит чтение данных из таблицы данных. Всякий раз, когда я выбираю первый ряд, он работает отлично. Но когда я выбираю более одной строки, это дает исключение, указанное в заголовке.

Ниже приведен код:

        DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel();
        int rows = Integer.parseInt((String)jTextField8.getText());
        String fileName = jTextField11.getText()+".csv";
        File file = new File("/Users/startelelogic/Desktop/fileName");
        if (jTable1.isEditing()){
            jTable1.getCellEditor().stopCellEditing();
        }
        try{
            FileWriter outputFile = new FileWriter(fileName);
            CSVWriter writer = new CSVWriter(outputFile);
            //  Adding Header to csv File
            String header[] = {"Sr. No.","CM","Liters"};
            writer.writeNext(header);
            //  Adding data to csv
            System.out.println("Rows \t:"+rows);
            for(int i=0; i<rows; i++){
                String[] data = new String[3];
                for(int j=0; j< tableModel.getColumnCount(); j++){
                    data[j] = (String)tableModel.getValueAt(i, j);
                }
                writer.writeNext(data);
                writer.close();
            }
            JOptionPane.showMessageDialog(null, "Table Data Written successfully!");
        }catch(IOException ex){
            JOptionPane.showMessageDialog(null, "FileWriting error");
            ex.printStackTrace();
        }

Output - When selecting 1 Row

Exception occurs, when selecting more than one rows.

1 Ответ

1 голос
/ 24 апреля 2020

java .lang.ClassCastException: класс java .lang.Integer не может быть приведен к классу java .lang.String

Хорошо, сообщение об ошибке говорит вам проблема. Вы не можете сделать объект Integer объектом String.

data[j] = (String)tableModel.getValueAt(i, j);

Приведенный выше оператор предполагает, что все данные в таблице являются экземплярами String.

Вместо этого вы можете использовать:

data[j] = tableModel.getValueAt(i, j).toString();

Теперь ваш массив данных будет содержать строковое представление каждого объекта.

...