java反序列化为空_Java序列化/反序列化,提供空对象引用

我正在开展一个小组项目,我们遇到了软件序列化部分的问题 . 我们有类协议:

import java.io.Serializable;

import javax.swing.table.TableModel;

public class Protocol implements Serializable{

private static final long serialVersionUID = 3474882407641871963L;

private int state;//0 = logged out

//1=logged in waiting for search

//2= search query sent

private String output;

private TableModel searchResults;

public Protocol(int state){

this.output = "";

this.state = 0;

this.searchResults = null;

}

public void setState(int s) {

this.state = s;

}

public void setOutput(String o) {

this.output = o;

}

public void setSearchResults(TableModel results) {

this.searchResults = results;

}

public String getOutput() {

return this.output;

}

public int getState(){

return this.state;

}

public TableModel getSearchResults(){

return this.searchResults;

}

}

我们还有SearchResult类:

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.ArrayList;

import java.util.List;

import javax.swing.event.TableModelListener;

import javax.swing.table.TableModel;

/**

* An implementation of the TableModel interface that utilises a List of DataRow objects to

* store the data.

*

* @version 13/03/2014

* @author Jake Darby

*

* @see DataRow

* @see TableModel

*/

public class SearchResult implements TableModel

{

private final List DATA;

private static final int NUM_COLUMNS = 8;

private final int NUM_ROWS;

/**

* Constructor that generates a SearchResult object from a set of Results of a query to the 'products' table

*

* @param data The results of an SQL query of the 'products' table

* @throws SQLException

*

* @see ResultSet

*/

public SearchResult (ResultSet data) throws SQLException

{

super();

DATA = DataRow.generate(data);

NUM_ROWS = DATA.size();

}

/**

* Constructor creates an empty TableModel

*/

public SearchResult()

{

super();

DATA = new ArrayList();

NUM_ROWS = 0;

}

@Override

public int getRowCount()

{

return NUM_ROWS;

}

@Override

public int getColumnCount()

{

return NUM_COLUMNS;

}

@Override

public String getColumnName(int columnIndex)

{

switch(columnIndex)

{

case 0:

return "ID";

case 1:

return "Name";

case 2:

return "Price";

case 3:

return "Pack Quantity";

case 4:

return "Quantity in Stock";

case 5:

return "VAT";

case 6:

return "Order Date";

case 7:

return "Expiry Date";

default:

return null;

}

}

@Override

public Class getColumnClass(int columnIndex)

{

switch(columnIndex)

{

case 0:

case 3:

case 4:

return Integer.class;

case 1:

case 2:

case 6:

case 7:

return String.class;

case 5:

return Boolean.class;

default:

return null;

}

}

@Override

public boolean isCellEditable(int rowIndex, int columnIndex)

{

return false;

}

@Override

public Object getValueAt(int rowIndex, int columnIndex)

{

DataRow row = DATA.get(rowIndex);

switch(columnIndex)

{

case -1:

return row.getPrice();

case 0:

return row.getID();

case 1:

return row.getName();

case 2:

return String.format("£%d.%02d", row.getPrice()/100, row.getPrice()%100);

case 3:

return row.getPackQuantity();

case 4:

return row.getQuantity();

case 5:

return row.getVAT();

case 6:

return row.getOrderDate() == null ? "N/A" : row.getOrderDate();

case 7:

return row.getExpiryDate() == null ? "N/A" : row.getExpiryDate();

default:

return null;

}

}

@Override

public void setValueAt(Object aValue, int rowIndex, int columnIndex)

{/*No implementation*/}

@Override

public void addTableModelListener(TableModelListener l)

{/*No implementation*/}

@Override

public void removeTableModelListener(TableModelListener l)

{/*No implementation*/}

@Override

public String toString()

{

String result = "";

for (int i = 0; i

当我们通过客户端 - 服务器套接字连接编写Protocol类时会出现问题 . 问题是Protocol类中的TableModel对象在序列化/反序列化过程中的某个时刻变为null,我们所做的任何事情都没有解决这个问题 .

我们到目前为止尝试过:

在SearchResult中实现Serializable(我不认为由于TableModel实现Serializable而应该是必要的)

将TableModel字段变量更改为Protocol中的SearchResult字段变量

非常感激任何的帮助 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值