java.util.Vector
自定义可序列化类:
if(filename.equals("")){
javax.swing.JFileChooser fc = new javax.swing.JFileChooser();
if(fc.showSaveDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION){
filename = fc.getSelectedFile().toString();
}
}
try{
java.io.FileOutputStream fos = new java.io.FileOutputStream(filename);
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos);
oos.writeObject((Object)tl.entities);
baos.writeTo(fos);
oos.close();
fos.close();
baos.close();
}catch(java.io.FileNotFoundException e){
javax.swing.JOptionPane.showMessageDialog(this, "FileNotFoundException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}catch(java.io.IOException e){
javax.swing.JOptionPane.showMessageDialog(this, "IOException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
但是在保存时,它会显示一个定义的对话框错误:IOException: Could not save file: null (com.sun.java.swing.plaf.windows.WindowsFileChooserUI)
并且NullPointerException
javax.swing.plaf.basic.BasicListUI.convertModelToRow(BasicListUI.java:1251)
答案 0 :(得分:0)
也许你可以更好地检查文件名:
if (filename == null || "".equals(filename)){
javax.swing.JFileChooser fc = new javax.swing.JFileChooser();
if(fc.showSaveDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION){
filename = fc.getSelectedFile().toString();
}
if (filename == null || "".equals(filename)) {
// Display a message or anything else
return;
}
}
try {
...
}
答案 1 :(得分:0)
我不确切地知道问题是什么,因为您的异常消息不是那么清楚。但我对你的代码有2条评论:
答案 2 :(得分:0)
您的代码中存在一些问题。
我建议像这样编码:
while(file == null) { // force a file to be choosen
javax.swing.JFileChooser fc = new javax.swing.JFileChooser();
if(fc.showSaveDialog(this) == javax.swing.JFileChooser.APPROVE_OPTION) {
file = fc.getSelectedFile()
}
else {
javax.swing.JOptionPane.showMessageDialog(this, "No file selected", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
}
try{
java.io.FileOutputStream fos = new java.io.FileOutputStream(file);
java.io.ByteArrayOutputStream baos = new java.io.ByteArrayOutputStream();
java.io.ObjectOutputStream oos = new java.io.ObjectOutputStream(baos);
oos.writeObject((Object)tl.entities);
baos.writeTo(fos);
oos.close();
fos.close();
}catch(java.io.FileNotFoundException e){
javax.swing.JOptionPane.showMessageDialog(this, "FileNotFoundException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}catch(java.io.IOException e){
javax.swing.JOptionPane.showMessageDialog(this, "IOException: Could not save file: "+e.getCause()+" ("+e.getMessage()+")", "Error", javax.swing.JOptionPane.ERROR_MESSAGE);
}
答案 3 :(得分:0)
您的问题很难诊断,因为您没有显示您正在捕获的异常的堆栈跟踪。
为什么要将某些内容序列化为ByteArrayOutputStream
只将字节数组写入文件?你出于某种原因需要浪费记忆吗?
答案 4 :(得分:0)
我发现错误,保存对话框脚本本身工作得很好但是向量中的类有一个空指针导致错误。
但是感谢所有回复,我可以使用其中一些:)