java吧 关注:1,224,350贴子:12,680,105
  • 4回复贴,共1

关于JFrame的dispose方法内存不回收问题

只看楼主收藏回复

swing子窗口在关闭的时候执行dispose的是操作。但是这个窗口占用的内存始终不释放,不知道是为什么。下面是代码


IP属地:广东1楼2014-05-12 14:34回复
    主界面
    /*
    * To change this template, choose Tools | Templates
    * and open the template in the editor.
    */
    package com.mycompany.im;
    /**
    *
    * @author
    */
    public class TestMainFrame extends javax.swing.JFrame {
    /**
    * Creates new form TestMainFrame
    */
    public TestMainFrame() {
    initComponents();
    }
    /**
    * This method is called from within the constructor to initialize the form.
    * WARNING: Do NOT modify this code. The content of this method is always
    * regenerated by the Form Editor.
    */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
    jButton1 = new javax.swing.JButton();
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
    jButton1.setText("打开一下试试");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent evt) {
    jButton1ActionPerformed(evt);
    }
    });
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(52, 52, 52)
    .addComponent(jButton1)
    .addContainerGap(243, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
    layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addGap(60, 60, 60)
    .addComponent(jButton1)
    .addContainerGap(217, Short.MAX_VALUE))
    );
    pack();
    }// </editor-fold>
    //public static TestFrame t = new TestFrame();
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    TestFrame t = new TestFrame();
    t.setVisible(true);
    }
    /**
    * @param args the command line arguments
    */
    public static void main(String args[]) {
    /* Set the Nimbus look and feel */
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
    * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
    */
    try {
    for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
    if ("Nimbus".equals(info.getName())) {
    javax.swing.UIManager.setLookAndFeel(info.getClassName());
    break;
    }
    }
    } catch (ClassNotFoundException ex) {
    java.util.logging.Logger.getLogger(TestMainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (InstantiationException ex) {
    java.util.logging.Logger.getLogger(TestMainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (IllegalAccessException ex) {
    java.util.logging.Logger.getLogger(TestMainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    } catch (javax.swing.UnsupportedLookAndFeelException ex) {
    java.util.logging.Logger.getLogger(TestMainFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
    }
    //</editor-fold>
    /* Create and display the form */
    java.awt.EventQueue.invokeLater(new Runnable() {
    public void run() {
    new TestMainFrame().setVisible(true);
    }
    });
    }
    // Variables declaration - do not modify
    private javax.swing.JButton jButton1;
    // End of variables declaration
    }


    IP属地:广东2楼2014-05-12 14:35
    回复
      点击按钮打开的页面
      /*
      * To change this template, choose Tools | Templates
      * and open the template in the editor.
      */
      package com.mycompany.im;
      /**
      *
      * @author Administrator
      */
      public class TestFrame extends javax.swing.JFrame {
      /**
      * Creates new form TestFrame
      */
      public TestFrame() {
      initComponents();
      }
      /**
      * This method is called from within the constructor to initialize the form.
      * WARNING: Do NOT modify this code. The content of this method is always
      * regenerated by the Form Editor.
      */
      @SuppressWarnings("unchecked")
      // <editor-fold defaultstate="collapsed" desc="Generated Code">
      private void initComponents() {
      jScrollPane1 = new javax.swing.JScrollPane();
      jTextPane1 = new javax.swing.JTextPane();
      setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
      setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
      addWindowListener(new java.awt.event.WindowAdapter() {
      public void windowClosing(java.awt.event.WindowEvent evt) {
      formWindowClosing(evt);
      }
      });
      jScrollPane1.setViewportView(jTextPane1);
      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
      getContentPane().setLayout(layout);
      layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
      .addContainerGap()
      .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
      .addContainerGap())
      );
      layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(layout.createSequentialGroup()
      .addGap(69, 69, 69)
      .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addContainerGap(184, Short.MAX_VALUE))
      );
      pack();
      }// </editor-fold>
      private void formWindowClosing(java.awt.event.WindowEvent evt) {
      // TODO add your handling code here:
      jTextPane1.removeAll();
      jTextPane1 = null;
      //TestMainFrame.t=null;
      this.dispose();
      }
      /**
      * @param args the command line arguments
      */
      public static void main(String args[]) {
      /* Set the Nimbus look and feel */
      //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
      /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
      * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
      */
      try {
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
      if ("Nimbus".equals(info.getName())) {
      javax.swing.UIManager.setLookAndFeel(info.getClassName());
      break;
      }
      }
      } catch (ClassNotFoundException ex) {
      java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (InstantiationException ex) {
      java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (IllegalAccessException ex) {
      java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (javax.swing.UnsupportedLookAndFeelException ex) {
      java.util.logging.Logger.getLogger(TestFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      }
      //</editor-fold>
      /* Create and display the form */
      //java.awt.EventQueue.invokeLater(new Runnable() {
      //public void run() {
      new TestFrame().setVisible(true);
      //}
      // });
      }
      // Variables declaration - do not modify
      private javax.swing.JScrollPane jScrollPane1;
      private javax.swing.JTextPane jTextPane1;
      // End of variables declaration
      }


      IP属地:广东3楼2014-05-12 14:35
      回复
        在窗口里输入贴上好多文字,让内存升到够高,然后关闭,子窗口,内存始终不会下来。


        IP属地:广东4楼2014-05-12 14:35
        回复
          //释放内存
          frame.addWindowListener(new WindowListener() {
          @Override
          public void windowClosing(WindowEvent e) {
          System.exit(0);
          }
          @Override
          public void windowOpened(WindowEvent e) {
          }
          @Override
          public void windowClosed(WindowEvent e) {
          }
          @Override
          public void windowIconified(WindowEvent e) {
          }
          @Override
          public void windowDeiconified(WindowEvent e) {
          }
          @Override
          public void windowActivated(WindowEvent e) {
          }
          @Override
          public void windowDeactivated(WindowEvent e) {
          }
          });
          用这个


          IP属地:浙江5楼2017-04-01 15:05
          回复