gpt4 book ai didi

Java 可序列化对象到文件

转载 作者:行者123 更新时间:2023-12-01 15:58:28 26 4
gpt4 key购买 nike

我有一个 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.所有类均已实现Serialized接口(interface)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.InitationEvent.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(来源未知)

最佳答案

这个

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

应该是:

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

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

关于Java 可序列化对象到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4527582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com