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();
}