在可序列化对象上获取 NotSerializedException

2023-12-10

基本上,我编写了一个程序,将形状绘制到屏幕上,并将每个形状保存到 ArrayList 中。我想要做的是弄清楚如何将 ArrayList 保存到文件中,以便我可以稍后调用它并编辑已经存在的形状。

因此,当我已经将对象 Shape 可序列化时,我一直无法弄清楚为什么我不断收到 NotSerializedException 。

下面是我的代码的保存部分和 Shape 对象。

save.addActionListener(new ActionListener(){
  public void actionPerformed(ActionEvent e){
    int returnVal = fc.showSaveDialog(BallWorld.this);
    if(returnVal == JFileChooser.APPROVE_OPTION){
      File file = fc.getSelectedFile();
      ArrayList list = bp.shapes;
      FileOutputStream fos = null;
      ObjectOutputStream oos = null;
      try{
        fos = new FileOutputStream(file);
        oos = new ObjectOutputStream(fos);
        oos.writeObject(list);
        oos.close();
      }
      catch(IOException ex){
        ex.printStackTrace();
      }
    }
  }
});

  public class Shape implements Serializable{
    int radius;
    Point center;
    Color color;
    int sides;
    Polygon shape;
    public Shape(int _radius, Point _center, Color _color, int _sides){
      radius = _radius;
      center = _center;
      color = _color;
      sides = _sides;
    }
    public void draw(Graphics g){
      Graphics2D g2d = (Graphics2D) g; 
      g2d.setColor(color);
      shape = new Polygon();
      if(sides != 0 && sides != 4){
        if(sides % 2 == 0){
          if(sides / 2 % 2 == 0){
            for(int i = 0; i < sides; i++){
              shape.addPoint((int) (center.x + radius * Math.cos(i * 2 * Math.PI / sides - Math.PI / sides)), (int) (center.y + radius * Math.sin(i * 2 * Math.PI / sides - Math.PI / sides)));
            }
          }
          else if(sides / 2 % 1 == 0){
            for(int i = 0; i < sides; i++){
              shape.addPoint((int) (center.x + radius * Math.cos(i * 2 * Math.PI / sides)), (int) (center.y + radius * Math.sin(i * 2 * Math.PI / sides)));
            }
          }
        }
        else{
          for(int i = 0; i < sides; i++){
            shape.addPoint((int) (center.x + radius * Math.cos(i * 2 * Math.PI / sides - Math.PI / 2)), (int) (center.y + radius * Math.sin(i * 2 * Math.PI / sides - Math.PI / 2))); 
          }
        }
        g2d.fillPolygon(shape);
      }
      else if(sides == 4){
        g2d.fillRect(center.x - radius, center.y - radius, radius * 2, radius * 2);
      }
      else{
        g2d.fillOval(center.x - radius, center.y - radius, radius * 2, radius * 2);
      }
      repaint();
    }
    public boolean contains(Point p){
      if(sides == 0){
        if(center.distance(p) <= radius){
          return true;
        }
      }
      else if(sides == 4){
        if(p.x <= center.x + radius && p.x >= center.x - radius && p.y <= center.y + radius && p.y >= center.y - radius){
          return true;
        }
      }
      else{
        if(shape.contains(p)){
          return true;
        }
      }
      return false;
    }
  }

java.io.NotSerializableException: javax.swing.plaf.basic.BasicFileChooserUI$AcceptAllFileFilter
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
at javax.swing.JComboBox.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
at javax.swing.JLabel.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeArray(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at javax.swing.ArrayTable.writeArrayTable(Unknown Source)
at javax.swing.JComponent.writeObject(Unknown Source)
at sun.reflect.GeneratedMethodAccessor11.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteObject(Unknown Source)
at java.awt.Window.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.awt.Window.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at java.util.ArrayList.writeObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeWriteObject(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at BallWorld$2.actionPerformed(BallWorld.java:112)
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$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$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)

为了避免 NotSerializedException,请确保:

  1. 你的班实现可序列化
  2. 所有非原始的members实现可序列化(或者是瞬态的)
  3. 如果你的班级是内部类它要么是静态的,要么是外部类实现的 可串行化

除此之外,你还需要定义序列号版本UID对于每个可序列化的类。检查以上所有 3 种情况,再加上:

  1. 全部可序列化超类
  2. 如果你的班级是匿名类,也在那里定义它

注意:您的代码有时可以在没有serialVersionUID的情况下工作,但是阅读 Serialized 的 javadoc 的最后一段了解为什么它会成为一个问题,具体取决于环境。


有一个 VM 选项可以向异常添加详细信息。它显示根类和嵌套类未能序列化:

-Dsun.io.serialization.extendedDebugInfo=true
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在可序列化对象上获取 NotSerializedException 的相关文章

  • Android:java.lang.OutOfMemoryError:

    我在 Android 上开发了一个使用大量图像的应用程序 可绘制文件夹中有很多图像 比如说超过 100 张 我正在开发图像动画应用程序 我使用 imageview 来显示 GIF 图像 我使用了将 gif 图像分割成多个 PNG 格式图像的
  • 不支持的字段:将瞬间格式化为日期 ISO 时的年份[重复]

    这个问题在这里已经有答案了 我正在尝试将 Instant 格式化为 ldap 日期 ISO8601 但在 f format Instant now 处失败 String input 20161012235959 0Z DateTimeFor
  • 在 String 值之后打印 int 值

    我有以下示例代码 int pay 80 int bonus 65 System out println pay bonus bonus pay 有人可以向我解释一下为什么我得到以下输出 145 6580 您的代码正在从左到右解释表达式 pa
  • Hashset - 创建 Set 后使对象相同

    如果我们在 HashSet 中添加两个不同的对象 可变的 然后通过调用 setter 更改对象的值 使它们相同 则大小仍然是 hashSet 的 2 我无法理解其原因 public static void main String args
  • 如何从 Java 访问 Windows 设备管理器中的信息?

    我有一个串行 USB 设备 并且其中多个设备可以连接到计算机 我需要查询和检索设备连接到的 COM 端口列表 在 Windows 设备管理器中 您可以获得当前连接的设备的 COM 端口 友好名称 该列表是动态的 从注册表中读取不工作 htt
  • 在 Eclipse 3.5 上安装旧版 TestNG 插件时出现问题

    我正在尝试在 eclipse 3 5 上安装 TestNG 5 11 并获得以下信息 eclipse buildId unknown java version 1 6 0 19 java vendor Sun Microsystems In
  • java项目中无法加载类“org.slf4j.impl.StaticLoggerBinder”错误? [复制]

    这个问题在这里已经有答案了 我越来越Failed to load class org slf4j impl StaticLoggerBinder 错误 我想将记录器写入文件 所以我使用了 log4j jar 并使用 apache tomca
  • Spring HATEOAS 和 HAL:更改 _embedded 中的数组名称

    我正在尝试使用 Spring HATEOAS 构建符合 HAL 的 REST API 经过一番摆弄后我终于开始工作了mostly正如预期的那样 示例 输出现在看起来像这样 links self href http localhost 808
  • for循环中更新JLabel的问题

    我的程序的想法是从之前在其他 JFrame 中保存的列表中选择一个名称 我想在标签中一个接一个地打印所有名称 它们之间有很小的延迟 然后停在其中一个名称上 问题是lbl setText String 如果有多个则不起作用setText co
  • 如何在Netbeans中设置JList的ListModel?

    我在 Netbeans IDE 的帮助下设计了一个 Swing GUI 该 GUI 包含一个 JList 默认情况下 它使用 QAbstractListModel 将其作为 JList 构造函数中的参数传递以创建该 JList 我想在 Ne
  • 是否可以手动检查 LocateRegistry 是否存在?

    I 已经发现 https stackoverflow com a 8338852 897090一种安全的方式获得LocateRegistry 即使注册表尚不存在 Registry registry null try registry Loc
  • 了解Kafka流groupBy和window

    我无法理解 kafka 流中的 groupBy groupById 和窗口的概念 我的目标是聚合一段时间内 例如 5 秒 的流数据 我的流数据看起来像 value 0 time 1533875665509 value 10 time 153
  • JPA Web 应用程序管理策略

    我们目前正在开发一个 J2EE Web 应用程序 使用 JPA 作为我们的数据访问层 我们目前正在研究几种不同的策略来在我们的应用程序中利用缓存 Create an EntityManager per request 在请求范围内获取缓存
  • Spring - 如何在不匹配列名的情况下使用 BeanPropertyRowMapper

    我正在开发一个应用程序 该应用程序已使用行映射器从纯 JDBC 转换为 Spring 模板 我遇到的问题是数据库中的列与属性名称不匹配 这阻止我使用BeanPropertyRowMapper容易地 我看到一些关于在查询中使用别名的帖子 这会
  • Proguard 正在破坏我的清洁度。 Gson 和泛型

    我有一个从持久性加载信息的函数 我只是以一种非常简单的方式告诉它的类型 该类称为SharedPreferencesHelper kt所以它是一个真正的生活问题解决者 fun
  • Firebase:用户注册后如何进行电话号码验证?

    所以我知道我可以使用电子邮件验证或电话号码验证 但我想做的是在用户注册或登录后进行电话号码验证 如何连接这两种身份验证方法 最后 Firebase中是否有一个函数可以检查用户是否通过电话号码验证 谢谢 即使用户已通过身份验证 您仍然可以使用
  • java Web应用程序中的日期转换

    String date1 13 03 2014 16 56 46 AEDT SimpleDateFormat sdf new SimpleDateFormat dd MM yyyy HH mm ss z sdf setTimeZone Ti
  • 从 InputStream 中删除换行符

    我喜欢从一个文件中删除所有换行符 对于 n 和 r n java io InputStream 在读取文件时 相应的方法如下所示 param target linkplain File return linkplain InputStrea
  • Java时区混乱

    我正在运行 Tomcat 应用程序 并且需要显示一些时间值 不幸的是 时间快到了 还有一个小时的休息时间 我调查了一下 发现我的默认时区被设置为 sun util calendar ZoneInfo id GMT 08 00 offset
  • 我怎样才能限定我不“拥有”的自动装配设置器

    要点是 Spring Batch v2 测试框架具有JobLauncherTestUtils setJob与 Autowired注解 我们的测试套件有多个Job类提供者 由于这个类不是我可以修改的东西 我不确定如何限定它自动连接的作业 每个

随机推荐

  • 在 NUnit 测试期间的拆卸事件中,如何获取应用于刚刚测试的方法的属性?

    我有一个正在运行的测试方法 当该方法生成异常时 我想知道测试的名称是什么以及异常内容 在测试的拆解中 我想访问此信息 我如何从 TearDown 归因方法 您可以在测试拆卸方法中访问文本上下文对象 TearDown public void
  • 在父窗口小部件中访问子窗口小部件的变量(Flutter with Dart)

    我有一个按钮 按下该按钮会打开模式底部表单 该工作表有一个表单小部件 需要几个文本字段和一个图像 来自图库 相机 对于此图像输入 我创建了另一个有状态小部件 该小部件在上一个视图 模式表 中调用 现在 通过用户接收到的图像文件被设置在子有状
  • 如何使用 Spring Cloud 在一个 Spring Boot 应用程序中连接/配置两个 pubsub gcp 项目?

    目前 我们正在 GCP 项目中开发一个 Spring Boot 应用程序 该应用程序连接到同一 GCP 项目中的 PubSub 端点 同时也连接到anotherGCP 项目 我想使用普通的 Spring Cloud GCP PubSub 组
  • 使用JQuery函数减少重复代码

    在这里发现了一个很好的jquery弹出功能 JAVASCRIPT function word1234 live click function event this addClass selected parent append div cl
  • 如何对 ObservableCollection 进行分页?

    我有一个列表框 里面有太多项目 并且 UI 变得越来越慢 虚拟化已打开 等等 因此 我正在考虑仅显示前 20 个项目 并允许用户浏览结果集 即 ObservableCollection 有人知道 ObservableCollection 是
  • VS2012 ASP.Net错误消息无法连接到配置的开发Web服务器

    我上周购买了一台新的 Windows 8 电脑 首先我在上面安装了 VS 2010 但后来它无法正常工作 所以我卸载了 VS 2010 然后安装了 VS 2012 专业版和 SQL Server 2012 现在我可以创建 Windows 应
  • 以本地语言输出的日期函数[重复]

    这个问题在这里已经有答案了 我正在尝试使用意大利语格式输出日期date 如下 然而 它仍然以英文格式发布 我还能做什么 有什么不对 该解决方案必须是特定于脚本的 而不是服务器范围的 date 不支持区域设置 你应该使用strftime 及其
  • 从不同按钮切换模式弹出窗口

    我试图从菜单中的不同按钮打开此弹出窗口 但是 弹出窗口内容将保持不变 Thanks Banick function OpenModalT var modal document getElementById myModalT modal st
  • 如何使用RecyclerView android仅选择一个RadioButton?

    我有一个带有RadioButton的RecyclerView 我只想同时选择一个不多的RadioButton 我的代码使它工作正常 但是当我从上到下重复选择时 选择消失了 我该如何修复它 谢谢 private RadioButton las
  • 异常:AAPT2 错误:检查日志以获取详细信息

    Task processDebugResources Failed to execute aapt com android ide common process ProcessException Failed to execute aapt
  • Blazor WebAssembly 发布失败

    我正在尝试发布一个针对 NET 5 0 的 Blazor WebAssembly 应用程序 我使用默认设置从 Visual Studio 2019 创建了一个新的 Web 部署发布配置文件 该网站已发布到 IIS 但浏览器显示 500 19
  • Angular:点击浏览器后退按钮将用户带回家[重复]

    这个问题在这里已经有答案了 如果用户位于我的角度平台中 当用户单击浏览器的后退按钮时 我想将用户带到主页 还有一个边缘情况需要处理 如果用户通过谷歌搜索 Facebook 或直接输入链接来到我们的平台 那么我们不能执行此行为 但如果他已经在
  • Jenkins 和 NodeJS 插件 - 权限被拒绝错误

    我已经成功地在 Raspberry Pi 上设置了一个 Jenkins 实例 并且在最终遇到这个绊脚石之前已经安装了 NodeJS 插件 Started by an SCM change Building in workspace var
  • Protobuf-net 序列化枚举值超出范围

    C 允许将任何整数值分配给 enum 当我尝试使用值超出范围的枚举字段序列化 通过 protobuf net 对象时 它会抛出异常 没有线值映射到枚举 PersonLevel 我的枚举 PersonLevel 没有 Flags 属性 Pro
  • glBufferData分配的内存什么时候释放?

    假设我为统一缓冲区分配内存 如下所示 GLuint length 0x1000 GLuint myBuffer glGenBuffers 1 myBuffer glBindBuffer GL UNIFORM BUFFER myBuffer
  • 抛出奇怪的 org. Threeten.bp.DateTimeException ?

    我的代码运行得很好 今天突然我开始遇到这个异常 org threeten bp DateTimeException Field DayOfMonth cannot be printed as the value 1872095944 max
  • PHP 转换特殊字符,如 ş 到 s、ţ 到 t、ă 到 a

    我不知道如何命名我需要的内容 我想在 PHP 中将字符转换为更 正常 的字符集 例如 to become s to become t to become a 我有罗马尼亚城镇名称 我想在 URL 中使用更多 正常 字符 我想我想将罗马尼亚字
  • 退出时删除共享内存

    我有两个脚本 一个用于创建和写入共享内存块 第二个用于读取该共享内存 问题是 当第一个脚本结束时 即使我不取消链接 共享内存也会被删除 这是我的第一个脚本 import argparse import csv import os impor
  • 模板中的读取路径[重复]

    这个问题在这里已经有答案了 有没有办法读取当前页面的路径 例如 我在 www example com foo bar 我想阅读 foo bar 我必须在模板文件中执行此操作而不修改视图 并且我有太多视图文件而无法编辑每个视图文件 Cheer
  • 在可序列化对象上获取 NotSerializedException

    基本上 我编写了一个程序 将形状绘制到屏幕上 并将每个形状保存到 ArrayList 中 我想要做的是弄清楚如何将 ArrayList 保存到文件中 以便我可以稍后调用它并编辑已经存在的形状 因此 当我已经将对象 Shape 可序列化时 我