【问题标题】:Java serializable object to a fileJava 可序列化对象到文件
【发布时间】:2011-05-30 11:31:16
【问题描述】:

我有一个 Swing 程序。我无法将整个主类保存到文件中。

public class GreenHouseMain extends JFrame implements ActionListener,
        MouseListener, Runnable, WindowListener, KeyListener, Serializable
{
//.....other components
static GreenHouseMain ghMain;
}
public static void main(String[] args)
    {
        ghMain = new GreenHouseMain();
    }

public void startEvents()
    {
        suspended = false;
        terminate = false;
        jbStart.setEnabled(false);
        worker = new Thread(new Runnable()
        {
            public void run()
            {
                try
                {
                    //Other Code
                } catch (ControllerException e)
                {
                    try
                    {
                        Date now = new Date();
                        String log = "";
                        PrintWriter out = new PrintWriter(new BufferedWriter(
                                new FileWriter("error.log")));
                        if (e.getMessage() == "Unknown Windows Malfuction")
                        {
                            log = "ErrorCode=1, WindowMalfunction," + now;
                        } else
                        {
                            log = "ErrorCode=2, PowerOut," + now;
                        }
                        out.println(log);
                        jTextArea.append(log + "\n");
                        out.close();
                        out.flush();

                        ObjectOutputStream output = new ObjectOutputStream(
                                new FileOutputStream("dump.out"));
                //It failed in here, says "java.lang.NullPointerException
                        output.writeObject(GreenHouseMain.ghMain);

                        output.flush();


                    } catch (IOException ex)
                    {
                        System.out.println(ex.getMessage());
                    }
                }
            }
        });
        worker.start();

    }

您应该知道的几件事: 1.所有类都实现了Serializable接口 2.程序中有多个线程(不知道是不是异常原因 3. 我之前使用相同的代码但在控制台应用程序中序列化了要归档的对象。不知道为什么在这里失败。

在 javax.swing.plaf.basic.BasicScrollPaneUI.paint(未知来源) 在 javax.swing.plaf.ComponentUI.update(未知来源) 在 javax.swing.JComponent.paintComponent(未知来源) 在 javax.swing.JComponent.paint(未知来源) 在 javax.swing.JComponent.paintToOffscreen(未知来源) 在 javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(未知来源) 在 javax.swing.RepaintManager$PaintManager.paint(未知来源) 在 javax.swing.RepaintManager.paint(未知来源) 在 javax.swing.JComponent._paintImmediately(未知来源) 在 javax.swing.JComponent.paintImmediately(未知来源) 在 javax.swing.RepaintManager.paintDirtyRegions(未知来源) 在 javax.swing.RepaintManager.paintDirtyRegions(未知来源) 在 javax.swing.RepaintManager.seqPaintDirtyRegions(未知来源) 在 javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(未知来源) 在 java.awt.event.InvocationEvent.dispatch(未知来源) 在 java.awt.EventQueue.dispatchEvent(未知来源) 在 java.awt.EventDispatchThread.pumpOneEventForFilters(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForFilter(未知来源) 在 java.awt.EventDispatchThread.pumpEventsForHierarchy(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.pumpEvents(未知来源) 在 java.awt.EventDispatchThread.run(未知来源)

【问题讨论】:

    标签: java serialization


    【解决方案1】:

    这个

                    } catch (IOException ex) {
                        System.out.println(ex.getMessage());
                    }
    

    应该是:

                    } catch (IOException ex)  {
                        ex.printStackTrace();
                    }
    

    这将为您提供更多更好的信息,最重要的是 NullPointerException 发生的确切行以及到达该行的位置。如果这不能使问题的原因很明显,请在调试器中启动程序并在该行放置一个断点。

    【讨论】:

    • 详细异常如下:线程“AWT-EventQueue-0”java.lang.NullPointerException中的异常
    • @Jack:重要的是后面的行。
    猜你喜欢
    • 1970-01-01
    • 2011-11-27
    • 2018-02-26
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多