Java:JTable更改侦听器,“对象无法转换为字符串”错误

我有一个JTable ,以及一个应该控制程序对各种动作的响应的类,我写的第一个是用于单元格更改事件。

每行都是从Part对象生成的,并且每列的列类都相应地设置。

 Part(String partName, String make, String partNumber, String altPartNumber, Double price, Integer quantity, String description, Boolean isAutomotive, Boolean isMarine, Boolean isIndustrial) { //...code not shown... } 

零件对象存储在可序列化的ArrayList

本质上,事件处理代码需要做的是使用从JTable获得的更新数据更新此ArrayList特定部件对象的参数值。

下面的代码演示了我想如何做到这一点; 这里出现标题中提到的错误。 任何人都可以解释如何处理这个问题?

 public class EventController extends UI implements TableModelListener { // Declarations: private int row; private int column; private Part partToChange; // ...Omitted for brevity... private String updatedName; private String updatedMake; private Integer updatedQuantity; // Don't need declarations for the booleans, can just toggle them. @Override public void tableChanged(TableModelEvent e) { // Find out where the change took place... this.column = e.getColumn(); this.row = e.getFirstRow(); // Get the new value... // Send the new value to parts... partToChange = data.getPart(row); switch(column) { case 0: updatedName = getTableModel().getValueAt(row, column); // ERROR OCCURS HERE ^ partToChange.setName(updatedName); } } } 

你的getTableModel().getValueAt(row, column); 返回一个Object引用而不是String,但是您将它分配给一个String变量。 您的选择包括:

  • 你可以将返回的内容强制转换为String,但是如果你的强制转换是不正确的,如果它实际上不是一个字符串,你就会冒险。
  • 或者你可以调用toString() 。 如果它不是String,则不会出现exception,但返回的String可能不是您想要使用的。 但是,如果变量为null,则会出现问题,如果不先检查null,则存在NullPointerException的风险。 我建议你走这条路。
  • 或者根据Richard Walton ,通过使用String.valueOf()您可以避免toString()的nullexception问题。 谢谢理查德!