Exception à la règle.getCause() pour retourner la valeur null lorsque vous essayez de trouver la source d'une exception
pourquoi ne System.out.println(e.getCause());
donne null
?
Et peut stocker tout HashSet collection de ce genre?
private void saving() throws IOException, ClassNotFoundException {
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
out.writeObject(c);
} catch (java.io.NotSerializableException e) {
System.out.println(e.getCause());
} finally {
out.close();
}
}
Utilisé printStackTrace()
au lieu de getCause()
java.io.NotSerializableException: Data$1
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
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 java.util.HashSet.writeObject(HashSet.java:284)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:962)
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.writeObject(ObjectOutputStream.java:346)
at Prozor.saving(Prozor.java:81)
at Prozor.actionPerformed(Prozor.java:57)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
at java.awt.Component.processMouseEvent(Component.java:6268)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6033)
at java.awt.Container.processEvent(Container.java:2045)
at java.awt.Component.dispatchEventImpl(Component.java:4629)
at java.awt.Container.dispatchEventImpl(Container.java:2103)
at java.awt.Component.dispatchEvent(Component.java:4455)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4633)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4297)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4227)
at java.awt.Container.dispatchEventImpl(Container.java:2089)
at java.awt.Window.dispatchEventImpl(Window.java:2517)
at java.awt.Component.dispatchEvent(Component.java:4455)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:649)
at java.awt.EventQueue.access$000(EventQueue.java:96)
at java.awt.EventQueue$1.run(EventQueue.java:608)
at java.awt.EventQueue$1.run(EventQueue.java:606)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:116)
at java.awt.EventQueue$2.run(EventQueue.java:622)
at java.awt.EventQueue$2.run(EventQueue.java:620)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:619)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
Ne vois toujours pas le problème, sauf qu'il snaped sur le premier objet de la collection, et la collection est mise en œuvre Serializable
, tous les objets également de mettre en œuvre Serializable
et fils ont transitoire où a déclaré
Pourquoi ne pas utiliser
Il y a des cas où les deux getCause() et getMessage() sera nulle. La seule bonne solution est de comprendre quels types d'exception vont être jetés et à les gérer correctement.
getMessage
?Il y a des cas où les deux getCause() et getMessage() sera nulle. La seule bonne solution est de comprendre quels types d'exception vont être jetés et à les gérer correctement.
OriginalL'auteur nkvnkv | 2011-05-28
Vous devez vous connecter pour publier un commentaire.
Lorsqu'une exception est enchaînés, le
getCause
méthode est utilisée pour obtenir la cause d'origine. Dans ce cas, l'exception n'était pas enchaîné à partir de n'importe quelle autre couche, doncgetCause
retournenull
. Vous devez utilisere.printStackTrace()
au lieu de cela, obtenir la raison de l'exception. Le plus probable, ce serait parce que l'un ou plusieurs des clés/valeurs dans votreHashSet
sont d'un type qui n'est pas la mise en œuvre dejava.io.Serializable
.OriginalL'auteur Binil Thomas
Utilisation
printStackTrace()
au lieu degetCause()
.Et oui, vous pouvez enregistrer un ensemble de la collection (tant qu'il contient des objets qui implémentent Serilizable).
OriginalL'auteur Iñigo Beitia