今天晚上,当我拖放一个早上运行良好的项目时,我仍然会收到数千个这样的错误。我有140个类,我不能跟踪我所做的所有修改:(但我从来没有改变任何与拖放功能相关的东西。我已经完全远离代码中的这一行,抛出这些。例外 这是我的代码的一部分导致异常:无关的java.io.NotSerializableException总是引用相同的代码行
Object obj = ts.getTransferable().getTransferData(TransferableProductJob.PRODUCTJOB_DATA_FLAVOR);
我已经从该行的堆栈跟踪的追查:
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)
个
我attemps:
- 我做这些都表明这个 异常短暂的所有类引用或我让他们的序列化的一个子类(也许 它是超过40类完成)
- 有时。我有一个错误 说不是一个有效的类构造函数,在这种情况下,我添加了一个 受保护的默认构造函数。所以我继续对其他类有以上 例外。
- 新的Attemp:我试图删除barJPanel和所有相关的类,我看到异常消失,但DnD已停止工作。这很令人伤心,因为我没有改变DnD部分的任何代码。我认为它在一些类中使用默认构造函数创建新对象时很愚蠢。我的构造函数很复杂,我想知道Java如何使用默认构造函数来操作类。
顺便说一下。
- 所有序列化类在我的应用程序有自己的serialVersionUID
- 我从来没有使用在整个应用程序直接或间接相关的系列化什么。所以不要问我的代码。这都是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();
}
});
}
});
'View.panels.BarsJPanel $ 1'是'View.panels.BarsJPanel'的一个_anonymous内部类,***不是***的子类,它想要序列化但本身不是可序列化的。 –
我只有一个匿名类,它是一个Listener!我不认为让听众可串行化是一个好主意。 swing是否将所有监听器序列化。为什么我在创建匿名侦听器类作为侦听器时不会收到任何警告? – Johnny
如果对匿名实例的引用存储在'BarsJPanel'的成员中,那么当串行化BarsJPanel时,它将被序列化。标记该参考瞬态。 –