`
owen200008
  • 浏览: 6216 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

netbeans序列化问题

阅读更多

现在我们项目中遇到如下的问题:希望有人知道的帮忙解决下.

在被定义了transient以后是不能被序列化的,只能通过重载WriteObject,ReadObject来序列化被定义的参数.

我们是监听netbeans平台上的鼠标跟键盘事件,通过Toolkit,然后在eventDispatched处理,相信很多人都用过.

得到的AWTEvent应该是 ACTION(操作) ON SOURCE(应该是一个组建,假设是鼠标事件,那就是被点击的那个组建)形式的.我们通过序列化可以反序列化得到ACTION ON NULL.因为SOURCE是一个OBJECT,被定义了transient.

然后我们重载了WriteObject,ReadObject. 想把SOURCE也保存进去. 但是就是出错.java.io.NotSerializableException.

在SOURCE这个OBJECT里所指的东西(我认为是组建,但是组建已经被定义了Serializable).所以应该不会出现这个错误才对的.

这个应该指的我们要序列化的类或者其他不可序列化(不知道我的理解是否正确).

然后我就做了一下的一个JFrame来验证, 里面含有JButton,TextField,JToolBar.然后同样我用Toolkit来监听,重载WriteObject,ReadObject. 然后保存到文件中,从文件出然后重构AWTEvent,完全没有错误.我们用系统队列PostEvent也能执行这个动作,就是说ACITON ON SOURCE已经完全被序列化保存,然后读取重构出来.但是为什么在netbeans平台上的事件获取以后不能被序列化呢,I'm puzzled.希望了解的高手们能帮忙解决下,或者提供一些建议.

以下是一些我们JFrame的代码:

 /*建立我们所需要的JFrame,并且监听Mouse事件*/

  private void jbInit() throws Exception
  {
    jButton1.setText("button1");
    textField1.setText("textField1");
    menu.setLabel("file");
    menuitem.setLabel("file-one");
    menubar.add(menu);
    menu.add(menuitem);
  
    jButton1.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        jButton1_actionPerformed(e);
      }
     
    });
    this.setTitle("Test");
    this.setMenuBar(menubar);
    this.add(jButton1,BorderLayout.SOUTH); //设置JButton
    this.add(textField1, BorderLayout.CENTER);  //设置textField
    this.add(toolbar,BorderLayout.NORTH);//设置toolbar
    Toolkit.getDefaultToolkit().addAWTEventListener(a,AWTEvent.MOUSE_EVENT_MASK);//监听鼠标事件
    
    addWindowListener(new WinListener());
  }

/*eventDispatched处理函数,  myevent是我定义的一个类,应该叫myobject的因为只是存储AWTEvent的SOURCE*/

public void eventDispatched(AWTEvent event)
    {
        switch(event.getID())
        {
            case KeyEvent.KEY_PRESSED:
            case KeyEvent.KEY_RELEASED:
                return;
            case MouseEvent.MOUSE_PRESSED:
            case MouseEvent.MOUSE_RELEASED:
                break;
            case MouseEvent.MOUSE_MOVED:
            case MouseEvent.MOUSE_DRAGGED:
            case MouseEvent.MOUSE_ENTERED:
            case MouseEvent.MOUSE_EXITED:
                return;
            default:
                return;           
        }
        myevent = new Myevent(event.getSource());//获取SOURCE
        EventQueue eq= Toolkit.getDefaultToolkit().getSystemEventQueue();//获得系统事件队列
        try
        {
     //       System.out.println(myevent.getobject());
            ObjectOutputStream out = new ObjectOutputStream(new
            FileOutputStream("Label.txt"));//保存AWTEvent,不含SOURCE,上面提过
            ObjectOutputStream out1 = new ObjectOutputStream(new
            FileOutputStream("Label1.txt"));//保存SOURCE
            out.writeObject(myevent);
            out1.writeObject(event);
            out.close();
            out1.close();
            ObjectInputStream in = new ObjectInputStream(new
            FileInputStream("Label.txt"));//读取AWTEvent
            ObjectInputStream in1 = new ObjectInputStream(new
            FileInputStream("Label1.txt"));//读取SOURCE
            Myevent readobject = (Myevent)in.readObject();
            AWTEvent readevent = (AWTEvent) in1.readObject();
            in.close();
            in1.close();
            System.out.println(readobject.getobject());
            readevent.setSource(readobject.getobject());//设置读取到的AWTEvent的source
            eq.postEvent(readevent);//执行读到的AWTEvent
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

分享到:
评论

相关推荐

    测试工程(netbeans8.1,NetBeans自带glassfish4.1,JDK7)

    1. **序列化问题**:SFSB在集群环境中需要被序列化和反序列化,以在不同服务器之间传递。如果实现的`equals()`和`hashCode()`方法不正确,或者没有正确的`@javax.ejb.Stateful`注解,可能会导致状态丢失。 2. **...

    JAVA NetBeans 个人通讯录

    3. **文件I/O操作**:为了保存和读取通讯录数据,项目可能使用了Java的文件输入输出流(FileInputStream, FileOutputStream)和对象流(ObjectInputStream, ObjectOutputStream)进行序列化和反序列化操作,将数据...

    netbeans程序开发技术详解光盘内容

    8. **第6章**:可能讲解了Java的输入/输出(I/O)和文件操作,包括文件读写、序列化和XML处理。NetBeans提供了便捷的代码生成器,简化了这些任务。 9. **第10章**:可能是关于Java的国际化和本地化(i18n和l10n)的...

    netbeans版 21点纸牌游戏 源代码

    - NetBeans是一个强大的集成开发环境,它的可视化组件库使得创建用户界面变得简单。在这个21点游戏中,开发者可能会使用`JButton`来表示“要牌”、“摊牌”等操作,`JLabel`来显示手牌和点数,`JTable`或者自定义...

    java俄罗斯方块netbeans完整项目

    NetBeans是一个强大的Java集成开发环境,提供了可视化工具来创建GUI组件。在这个项目中,开发者使用了JFrame作为主窗口,JPanel作为游戏面板,以及各种JButton和JLabel来显示游戏状态和控制选项。通过拖放组件和...

    NetBeans下设计UML模式.rar

    UML的主要元素包括类图、对象图、用例图、序列图、协作图、状态图、活动图等,这些图型化工具能够帮助我们理解和表述系统的静态结构和动态行为。在NetBeans中,我们可以创建这些图表来辅助软件开发过程: 1. **类图...

    用NetBeans开发Java GUI程序(用户登录注册)

    - JSON(JavaScript Object Notation)常用于交换用户数据,可以使用Gson或Jackson库进行序列化和反序列化。 7. **异常处理和错误提示**: - 在开发过程中,应考虑异常情况,如网络错误、数据库连接失败等,并给...

    escpos_netbeans_ESCPOS_Dot._

    总的来说,这个主题涉及到了使用NetBeans开发环境,利用ESC/POS打印机控制语言,与点阵打印机进行通信,以实现定制化的打印任务。在实际操作中,开发者需要具备一定的Java编程基础,理解ESC/POS命令集,并能够灵活...

    javaee-Session持久化小结

    2. 数据库或文件系统持久化:这种方式将Session数据序列化后存入数据库或文件,当需要时再反序列化恢复。这可以解决Cookie存储量有限的问题,但增加了系统复杂性,需要考虑数据同步、并发访问等问题。例如,可以使用...

    NetBeans快捷件大全

    ### NetBeans快捷键大全知识点详解 #### 一、查找与搜索功能 - **Ctrl-F3**: 搜索位于插入点的词。此快捷键允许用户快速定位当前光标所在位置的单词,并查找其在文档中的其他出现位置。 - **F3/Shift-F3**: 在文件...

    日期与长整型转换器工具(Java/Netbeans)

    这样的操作通常发生在数据库存储、序列化或者时间戳计算等场景。"日期与长整型转换器工具"正是针对这种需求而设计的一个实用工具,它使用NetBeans IDE进行开发,旨在简化Java开发人员的工作,帮助他们在调试时快速...

    Simple-Socket-Chat:Java,套接字,Netbeans

    - **数据打包与解包**:在网络通信中,数据需要转换为字节流进行传输,了解如何使用对象序列化和反序列化技术是必不可少的。 这个简单的聊天应用项目是一个很好的起点,开发者可以通过它深入理解Java套接字的使用,...

    java client客户短调用WCF服务代码1

    4. **处理数据序列化**:由于Java和.NET使用不同的数据类型和序列化机制,所以数据的序列化和反序列化是关键。可能需要自定义适配器来确保数据在两个平台之间正确转换。 5. **错误处理和异常处理**:在调用服务时,...

    spring 支持@RequestBody注解依赖包

    在这个压缩包文件`jackson`中,可能包含了Jackson库的不同模块,比如`jackson-databind`,它是Jackson的核心模块,负责基本的JSON反序列化和序列化功能。此外,还有可能包含其他模块,如`jackson-annotations`提供...

    AFI-Chat:AFI NetBeans IDE 8.0.2 通信聊天 - JDK 1.7

    3. **数据序列化与反序列化**:消息在传输过程中可能需要转换为字节流,Java的`java.io`包中的`ObjectOutputStream`和`ObjectInputStream`可以实现对象的序列化和反序列化。 4. **GUI设计**:NetBeans IDE提供了...

    Java ME手机蓝牙俄罗斯方块源码

    - **数据序列化与反序列化**:游戏状态可能需要通过蓝牙发送,这涉及到对象的序列化和反序列化,以便在网络间传输。 - **数据包封装与解析**:在蓝牙通信中,数据可能需要封装成特定格式(如二进制或JSON),并在...

    JavaBeansDevelop

    3. **可序列化**:JavaBeans需要实现`Serializable`接口,以便能够被序列化和反序列化。这意味着JavaBean的状态(其属性值)可以保存到磁盘并在稍后恢复,或者在网络中传输。 4. **事件处理**:JavaBeans支持事件...

    自制Java聊天室软件

    8. **数据序列化与反序列化**: 如果聊天记录需要保存或加载,那么数据的序列化和反序列化就成为必需。Java的Serializable接口可以帮助我们将对象转换为字节流,便于存储和传输。 9. **安全性考虑**: 由于涉及网络...

    qq客户端_qq客户端_

    3. **数据序列化与反序列化**:消息和文件在传输前需要进行序列化,将对象转换为字节流,到达目的地后再进行反序列化恢复为原来的对象。Java提供了内置的序列化机制,通过实现Serializable接口即可。 4. **文件传输...

    NetCeylonBeans:NetBeans IDE 中的 Ceylon 插件

    5. **声明式编程**:Ceylon的注解和元数据功能,使得在代码中添加元信息变得简单,可用于实现依赖注入、序列化等高级功能。 6. **工具支持**:Ceylon提供了一套强大的命令行工具,用于构建、测试和打包项目。而...

Global site tag (gtag.js) - Google Analytics