Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java序列化是否以某种方式改变了对象?_Java_Swing_Serialization_Future_Defaulttablemodel - Fatal编程技术网

java序列化是否以某种方式改变了对象?

java序列化是否以某种方式改变了对象?,java,swing,serialization,future,defaulttablemodel,Java,Swing,Serialization,Future,Defaulttablemodel,我将defaultTableModel对象存储在可序列化的ProductObj类中 public class ProductObj implements Serializable{ private static final long serialVersionUID = 79839857245324985L; private Integer taskID; private List<String> data; private JFreeChart clim

我将defaultTableModel对象存储在可序列化的ProductObj类中

public class ProductObj implements Serializable{

   private static final long serialVersionUID = 79839857245324985L;

   private Integer taskID;
   private List<String> data;
   private JFreeChart climateChartPanel;
   private JFreeChart productivityChartPanel;
   private JFreeChart developmentChartPanel;
   private DefaultTableModel developmentTable;
   private DefaultTableModel productivityTable;

序列化Swing组件通常被认为是个坏主意。如果需要传输或存储数据,请将数据对象与UI对象分离。奇怪的是,如果不是一个好主意,为什么DefaultTableModel实现可序列化?@chrylis他正是这么做的。他不是序列化Swing对象,而是序列化其(
Serializable
)模型。这正是你应该做的。@ USER 884025在设计时,串行化被用来在有线上传输内容,而这仍然是可能的,它不再被认为是序列化实际模型,而是内容的好主意。模型携带的附加信息可能无法序列化,例如侦听器,因此状态可能变得不稳定。将对象序列化以进行长期存储也被认为是一个坏主意,您应该看看像JAXB这样的技术instead@EJP但是
ProductObj
包含Swing组件以及
TableModel
s
private void serialize(String path) throws Exception {
    List<ProductObj> products = new ArrayList<>(controller.getFutures().size());
    for(Future<ProductObj> f : controller.getFutures())
        products.add(f.get());

    try (FileOutputStream fileOut = new FileOutputStream(Util.PathNameThisOS(path+"/"+"SimulationObjects.srz")); 
         ObjectOutputStream out = new ObjectOutputStream(fileOut)) 
    {
        //out.writeObject(products);
    }

    products = unserialize(path);
}
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at javax.swing.plaf.synth.SynthLookAndFeel.paintRegion(SynthLookAndFeel.java:371)
at javax.swing.plaf.synth.SynthLookAndFeel.update(SynthLookAndFeel.java:335)
at javax.swing.plaf.synth.SynthViewportUI.update(SynthViewportUI.java:168)
at javax.swing.JComponent.paintComponent(JComponent.java:778)
at javax.swing.JComponent.paint(JComponent.java:1054)
at javax.swing.JViewport.paint(JViewport.java:731)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintChildren(JComponent.java:887)
at javax.swing.JComponent.paint(JComponent.java:1063)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5230)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295)
at javax.swing.RepaintManager.paint(RepaintManager.java:1249)
at javax.swing.JComponent._paintImmediately(JComponent.java:5178)
at javax.swing.JComponent.paintImmediately(JComponent.java:4989)
at javax.swing.RepaintManager$3.run(RepaintManager.java:808)
at javax.swing.RepaintManager$3.run(RepaintManager.java:796)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769)
at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718)
at javax.swing.RepaintManager.access$1100(RepaintManager.java:62)
at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)