- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在将序列化对象写入文件时遇到问题。我的保存例程总是在 ObjectOutput.writeObject(..) 处失败
我有一个 Inventory 类,其中包含项目的链接列表。 MainView 是程序的主 JFrame,它还保存 Inventory 对象。
我以前曾这样做过,但我决定重写我的程序的绝大多数。看来我做了一些事情把事情搞砸了,但我不知道是什么。
如果您需要更多代码,请告诉我,但我认为这涵盖了全部内容。
元素类别
import java.io.Serializable;
public class Item implements Serializable
{
private static final long serialVersionUID = 1L;
private String m_sItemNumber;
public String getItemNumber(){return m_sItemNumber;}
public void setItemNumber(String newVal){m_sItemNumber = newVal;}
public void setDefaults()
{
m_sItemNumber = "notset";
}
}
库存类别
import java.io.Serializable;
import java.util.LinkedList;
public class Inventory implements Serializable
{
private static final long serialVersionUID = 1L;
MainView mainView;
LinkedList<Item> Inventory = new LinkedList<>();
int indexOfCurrentItem;
public void setMainView(MainView view)
{
mainView = view;
}
public boolean addItem(Item it)
{
Inventory.add(it);
return true;
}
public Item getCurrentItem()
{
return Inventory.get(indexOfCurrentItem);
}
public Item getItemByIndex(int index)
{
return Inventory.get(index);
}
}
IOHandler串口保存函数
public boolean saveSerialInv(String arg)
{
loadSaveDialog.newStatusLine(" Starting Inventory Save");
ObjectOutput out = null;
try
{
out = new ObjectOutputStream(new FileOutputStream(arg));
}
catch (FileNotFoundException e)
{
loadSaveDialog.newStatusLine(" Could Not Create File");
return false;
}
catch (IOException e)
{
mainView.newStatusLine(" IO File save Exception");
return false;
}
try
{
out.writeObject(mainView.inventoryOfItems); // !! Fails here. !!
}
catch (IOException e)
{
loadSaveDialog.newStatusLine(" IO Write-- Exception");
try
{
out.close();
}
catch (IOException e1)
{
loadSaveDialog.newStatusLine(" IO Close save file Exception");
return false;
}
return false;
}
try
{
out.close();
}
catch (IOException e)
{
loadSaveDialog.newStatusLine(" IO Close save file Exception");
return false;
}
return true;
}
主视图类
public class MainView extends javax.swing.JFrame
{
static LoadSaveDialog loadSave = new LoadSaveDialog();
static ItemInfoDialog itemInfo = new ItemInfoDialog();
Inventory inventoryOfItems = new Inventory();
boolean invLoaded = false;
public MainView()
{
initComponents();
loadSave.setMainView(this);
inventoryOfItems.setMainView(this);
}
}
最佳答案
序列化的一般规则是,类中的所有属性都应该是可序列化
或标记为 transient
。没有关于 MainView 类是否可序列化的信息,如果不是,则将其标记为 transient 。
MainView mainView;
无法从对象流中读取/写入任何不可序列化的属性。因此这将会失败:
out.writeObject(mainView.inventoryOfItems); // !! Fails here. !!
关于Java ObjectOutput不会写对象,IO写异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18244612/
打开的ObjectOutputStream最初发送某个对象,并且补充的ObjectInputStream成功地反序列化它。然后,这个 OIS 被传递到一个单独线程类的构造函数,这是继续无缝读取(更新)
所以我想要完成的是在我的 FTP 服务器上创建一个新文件,然后写入该文件。这是我的代码 try { URL url = new URL("ftp://" + user + ":" + pas
我正在尝试使用套接字通过ObjectOutputStream发送一个包含一些信息的对象。当我调用方法 Client_Handler(String auth, String user) 并发送对象时,它
这是即将序列化为字节数组的类。 public class DummyClass implements Serializable { private static transient final
我已阅读开发者信息 here ,但我不确定我是否做对了。我想要我的文件在外部存储(SD 卡)上。 `ObjectOutputStream out = new ObjectOutputStream(ne
我正在尝试使用 ObjectOutputStream 从 SWT 打开/保存文本对象。但这不起作用。有人知道为什么吗? public static void read(String fileName,
我是一名优秀的程序员,十分优秀!