gpt4 book ai didi

java - 不相关的 java.io.NotSerializedException 始终引用同一行代码

转载 作者:行者123 更新时间:2023-12-01 13:43:53 24 4
gpt4 key购买 nike

今晚,当我拖放一个早上运行良好的项目时,我继续收到数千个这样的错误。我有 140 个类,我无法跟踪我所做的所有修改:(。但我从未更改过与拖/放功能相关的任何内容。我已经完全远离了代码中引发这些问题的行异常(exception)情况。这是我的代码中导致异常的部分:

Object obj = ts.getTransferable().getTransferData(TransferableProductJob.PRODUCTJOB_DATA_FLAVOR);

我已经从 stackTrace 的这一行追踪到了它:

at View.panels.WaitingListJPanel$JListTransferHandler.importData(WaitingListJPanel.java:209)

完整的堆栈跟踪是:

dic 10, 2013 12:21:45 AM View.panels.WaitingListJPanel$JListTransferHandler importData
SEVERE: null
java.io.NotSerializableException: View.panels.BarsJPanel$1
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at java.util.ArrayList.writeObject(ArrayList.java:710)
at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:975)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1480)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1528)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1493)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1416)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1174)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
at sun.awt.datatransfer.TransferableProxy.getTransferData(TransferableProxy.java:83)
at java.awt.dnd.DropTargetContext$TransferableProxy.getTransferData(DropTargetContext.java:376)
at View.panels.WaitingListJPanel$JListTransferHandler.importData(WaitingListJPanel.java:209)
at javax.swing.TransferHandler$DropHandler.drop(TransferHandler.java:1536)
at java.awt.dnd.DropTarget.drop(DropTarget.java:450)
at javax.swing.TransferHandler$SwingDropTarget.drop(TransferHandler.java:1274)
at sun.awt.dnd.SunDropTargetContextPeer.processDropMessage(SunDropTargetContextPeer.java:537)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetContextPeer.java:851)
at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:775)
at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:48)
at java.awt.Component.dispatchEventImpl(Component.java:4716)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4566)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4417)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:682)
at java.awt.EventQueue$3.run(EventQueue.java:680)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:696)
at java.awt.EventQueue$4.run(EventQueue.java:694)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:693)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)

我的尝试:

  • 我制作了由此指示的所有类(class)引用资料异常 transient 或者我使它们成为可序列化的子类。(也许已经完成了 40 多个类(class))
  • 有时我会犯错误说不是一个有效的类构造函数,在这种情况下我添加了一个 protected 默认构造函数。所以我继续上面的其他类的异常(exception)。
  • 新尝试:我尝试删除 barJPanel 和所有相关类,我发现异常消失了,但 DnD 已停止工作。非常遗憾,因为我没有更改 DnD 部分中的任何代码。我认为当它在某些类中使用默认构造函数创建新对象时,这是愚蠢的。我的构造函数很复杂,我想知道 Java 如何仅使用默认构造函数来操作类。

顺便说一下。

  1. 我的应用程序中的所有可序列化类都有自己的SerialVersionUID
  2. 我从未在整个应用程序中直接或间接使用与序列化相关的任何内容。所以不要问我的代码。都是 JVM。

主要问题是我无法继续我的尝试,因为 BarsJPanel 是可序列化的,因为它是 JPanel 的子类,并且使其短暂并不能解决任何问题。

<小时/>

添加匿名类代码:(GalvanicMachine 是可序列化的)

    galvanicMachine.addProductJobsListener(new IProductJobsListener() {

@Override
public void productJobAdded(ProductJob pj) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
reconstructPanelMap();
}
});
}

@Override
public void productJobRemoved(ProductJob pj) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
reconstructPanelMap();
}
});
}
});

最佳答案

GalvanicMachine 有一个成员集合,用于存储对 IProductJobsListener 匿名实现实例的引用。存储这些引用的集合必须是 transient 的,或者实现实例必须是可序列化的。

ActionListener 不是 JButton(子类)的实例,它包含在 JButton 中。序列化 ActionListener 没有多大意义。

关于java - 不相关的 java.io.NotSerializedException 始终引用同一行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20483134/

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