Java 在AbstractTable模型中使用getValueAt时接收ClassCastException

Java 在AbstractTable模型中使用getValueAt时接收ClassCastException,java,abstracttablemodel,Java,Abstracttablemodel,我有一个客户端/服务器程序。该程序的目标是使用套接字将数据数组发送到客户端,将数据显示到表中,然后能够编辑数据并将其发送回服务器进行存储。程序可以很好地编译,但在运行时,客户端不会将数组输出到表中。它显示一个错误: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to client.Network at client.MyTableMo

我有一个客户端/服务器程序。该程序的目标是使用套接字将数据数组发送到客户端,将数据显示到表中,然后能够编辑数据并将其发送回服务器进行存储。程序可以很好地编译,但在运行时,客户端不会将数组输出到表中。它显示一个错误:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to client.Network
    at client.MyTableModel.getValueAt(MyTableModel.java:77)



MyTableModel class: 

package client;

import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

public class MyTableModel extends AbstractTableModel {

        void setData(ArrayList<Network> serversArray) {
        data = serversArray;
        System.out.print(this.data +"\n");
        System.out.print(serversArray + "\n");

    }    

  ArrayList<Network> data = new ArrayList();
        String[] headers = {"NetworkID","Nodes","Hubs","Switches","Structure","Country","Status"};


    @Override
    public int getColumnCount() {
        return headers.length;
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public void setValueAt(Object value, int row, int col) {

        switch (col) {
                case 0:
                    data.get(row).setNetworkID((int) value);
                    break;
                case 1:
                    data.get(row).setNodes((int) value);
                    break;
                case 2:
                    data.get(row).setHubs((int) value);
                    break;
                case 3:
                    data.get(row).setSwitches((int) value);
                    break;
                case 4:
                    data.get(row).setStructure("");
                    break;
                case 5:
                    data.get(row).setCountry("");
                    break;
                case 6:
                    data.get(row).setStatus("");
                    break;
                }

                fireTableCellUpdated(row, col);
    }
    @Override
    public String getColumnName(int col)
    { return headers[col];  }


    @Override
    public Object getValueAt(int row, int col) {

      switch (col) {
      case 0:
        return data.get(row).getNetworkID();
      case 1:
        return data.get(row).getNodes();
      case 2:
        return data.get(row).getHubs();
      case 3:
        return data.get(row).getSwitches();
      case 4:
        return data.get(row).getStructure();
      case 5:
        return data.get(row).getCountry();
      case 6:
        return data.get(row).getStatus();
      }
    return 0;
   }
}
任何帮助都将不胜感激

更新:

private void displayNetworksActionPerformed(java.awt.event.ActionEvent evt) {                                                
   pw.println("SendCSV");

  // receieve data array from server     


  try {
      serversArray =  (ArrayList<Network>)ois.readObject();
      System.out.print(serversArray);

      statusBar.setText("Object Recieved from Server!");
  } catch (ClassNotFoundException ex) {
      statusBar.setText("Didnt Recieve Object");
  } catch (IOException ex) {
     statusBar.setText("Unable to Request");
  }

   // 4. update jtable
  this.myTableModel.setData(serversArray);
  this.myTableModel.fireTableDataChanged();


 }            
private void displayNetworksActionPerformed(java.awt.event.ActionEvent evt){
pw.println(“sendcv”);
//从服务器接收数据数组
试一试{
serversArray=(ArrayList)ois.readObject();
系统输出打印(服务器阵列);
statusBar.setText(“从服务器接收的对象!”);
}捕获(ClassNotFoundException ex){
statusBar.setText(“未接收对象”);
}捕获(IOEX异常){
statusBar.setText(“无法请求”);
}
//4.更新jtable
this.myTableModel.setData(serversArray);
this.myTableModel.fireTableDataChanged();
}            
更新:
我对此仍有疑问,有没有可能有人帮助解决问题?

对我来说,例外情况似乎非常清楚。异常抛出的确切位置在哪里?基本上,您正在尝试将一个字符串(从方法
MyTableModel.getValueAt
获得)强制转换为
网络类型的变量。也许您应该重新考虑
MyTableModel.getValueAt
方法的行为。我们需要了解
MyTableModel
的实例是如何填充的。我认为您在打算添加
网络
对象时添加了
字符串
。我认为MyTableModel是在我的ClientGUI类中填充的。他是从服务器接收数组的地方。显然,
readObject
实际上返回了一个
ArrayList
。这个异常对我来说非常清楚。异常抛出的确切位置在哪里?基本上,您正在尝试将一个字符串(从方法
MyTableModel.getValueAt
获得)强制转换为
网络类型的变量。也许您应该重新考虑
MyTableModel.getValueAt
方法的行为。我们需要了解
MyTableModel
的实例是如何填充的。我认为您在打算添加
网络
对象时添加了
字符串
。我认为MyTableModel是在我的ClientGUI类中填充的。他是从服务器接收数组的位置。显然,
readObject
实际上返回一个
ArrayList
private void displayNetworksActionPerformed(java.awt.event.ActionEvent evt) {                                                
   pw.println("SendCSV");

  // receieve data array from server     


  try {
      serversArray =  (ArrayList<Network>)ois.readObject();
      System.out.print(serversArray);

      statusBar.setText("Object Recieved from Server!");
  } catch (ClassNotFoundException ex) {
      statusBar.setText("Didnt Recieve Object");
  } catch (IOException ex) {
     statusBar.setText("Unable to Request");
  }

   // 4. update jtable
  this.myTableModel.setData(serversArray);
  this.myTableModel.fireTableDataChanged();


 }