java.io.NotSerializableException

У меня есть это исключение, и я не понимаю, почему это было бы брошено или, как я должен справиться с этим.

try { os.writeObject(element); } catch (IOException e) { e.printStackTrace(); } 

Где element TransformGroup содержащий некоторые другие TransformGroups , экземпляр classа Atom:

 public class Atom extends Group implements Serializable{ float pozX,pozY; Group group= new Group(); Color3f blue = new Color3f(new Color(255)); Color3f black = new Color3f(new Color(0)); Sphere AtSph=new Sphere(); public Atom(final float WEIGHT, final int BOUNDS,final float radius,Color3f color) { AppSetting ap= new AppSetting(color, black); AtSph=new Sphere(radius,1,100,ap); } } 

Полный журнал ошибок:

 java.io.NotSerializableException: javax.media.j3d.TransformGroup at java.io.ObjectOutputStream.writeObject0(Unknown Source) at java.io.ObjectOutputStream.writeObject(Unknown Source) at cls.MolecularBuilder.addAtom(MolecularBuilder.java:511) at cls.MolecularBuilder$Console.HidrogenItemActionPerformed(MolecularBuilder.java:897) at cls.MolecularBuilder$Console$2.actionPerformed(MolecularBuilder.java:746) at javax.swing.AbstractButton.fireActionPerformed(Unknown Source) at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source) at javax.swing.DefaultButtonModel.setPressed(Unknown Source) at javax.swing.AbstractButton.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source) at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source) at java.awt.Component.processMouseEvent(Unknown Source) at javax.swing.JComponent.processMouseEvent(Unknown Source) at java.awt.Component.processEvent(Unknown Source) at java.awt.Container.processEvent(Unknown Source) at java.awt.Component.dispatchEventImpl(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) at java.awt.Container.dispatchEventImpl(Unknown Source) at java.awt.Window.dispatchEventImpl(Unknown Source) at java.awt.Component.dispatchEvent(Unknown Source) at java.awt.EventQueue.dispatchEventImpl(Unknown Source) at java.awt.EventQueue.access$200(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.awt.EventQueue$3.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.awt.EventQueue$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source) at java.awt.EventQueue.dispatchEvent(Unknown Source) at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.pumpEvents(Unknown Source) at java.awt.EventDispatchThread.run(Unknown Source) 

Примечание. AppSetting (в classе Atom) – это просто настраиваемый class, расширяющий внешний вид.

Поля вашего объекта имеют свои поля, некоторые из которых не реализуют Serializable . В вашем случае class нарушения – TransformGroup . Как его решить?

  • если class принадлежит вам, сделайте его Serializable
  • если class является сторонним, но вам это не нужно в сериализованной форме, отметьте поле как transient
  • если вам нужны его данные, и это третья сторона, рассмотрите другие способы сериализации, такие как JSON, XML

Иногда «java.io.NotSerializableException» возникает, когда вы сериализуете экземпляр внутреннего classа, потому что:

«сериализация такого внутреннего экземпляра classа приведет к сериализации его связанного экземпляра внешнего classа»,

« Сериализация внутренних classов (т. Е. Вложенных classов, которые не являются статическими classами-членами), включая локальные и анонимные classы, настоятельно не рекомендуется »

Ссылка: интерфейс Serializable

Сделать class сериализуемым путем реализации интерфейса java.io.Serializable .

  • java.io.Serializable – интерфейс маркера, в котором нет никаких методов.
  • objective интерфейса маркера – сообщить ObjectOutputStream что этот объект является сериализуемым объектом.
  • Исключение MaxJsonLength в ASP.NET MVC во время JavaScriptSerializer
  • Исключение NoClassDefFoundError для CacheProvider
  • Почему Исключения считаются настолько плохими для входной проверки?
  • Когда Java Thread.sleep запускает InterruptedException?
  • Причина того, что «ответ Сервлета уже совершен»
  • Когда использовать утверждение и когда использовать исключение
  • Давайте будем гением компьютера.