Исключение ClassCastException в JTable.getValueAt(…)

#java #swing #jtable #classcastexception

#java #swing #jtable #classcastexception

Вопрос:

Моя проблема в этом коде:

 int rowToTable = table.getSelectedRow();
int bookId = (int)table.getValueAt(rowToTable, 0);  // line 158
  

Каково решение?

Мне нужно int значение BookID, а не Object .

Трассировка стека:

 Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer
at Project.BookPage_Admin.dellAction(BookPage_Admin.java:158)
at Project.BookPage_Admin.actionPerformed(BookPage_Admin.java:126)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
  

Комментарии:

1. Не могли бы вы опубликовать трассировку стека, пожалуйста?

2. какие объекты у вас есть в этой таблице?

3. @StefanBeike id , name isbn borrowedStatus и Date .

4. Если вы знаете, что это может быть преобразовано в целое число, используйте Integer.parseInt() для значения в таблице. Или, что еще лучше, при создании табличной модели используйте Integer вместо String

5. @user3808021: Попробуйте Integer.valueOf(table.getValueAt(rowToTable, 0)).intValue();

Ответ №1:

Похоже, что у вас есть строковые значения в этой таблице. В этом случае:

 int value = Integer.parseInt((String) table.getValueAt(rowToTable, 0));
  

Ответ №2:

Если вы точно знаете, что содержимое этого столбца является целым числом, то вместо приведения типа к int просто используйте Integer#parseInt()

  int bookId = Integer.parseInt((String)table.getValueAt(rowToTable, 0));
  

Надеюсь, это поможет.

Комментарии:

1. В этом говорится: incompatible types, Object cannot be converted to String

Ответ №3:

попробуйте это решение:

 int rowToTable = table.getSelectedRow();
int bookId = Integer.valueOf((String)table.getValueAt(rowToTable, 0));
  

или

 int bookId = Integer.parseInt((String)table.getValueAt(rowToTable, 0));
  

valueOf внутри также есть parseInt .