0

問題を解決できず、あなたの助けが必要です。メニューをクリックすると、顧客アカウントに電話し、その後それを閉じます。顧客アカウントを呼び出すたびに、メモリが増加します。アカウントを閉鎖すると減少するはずですが、そうはなりません。

クラスメニュー

mnItemCL_Cust.setOnAction(new EventHandler<ActionEvent>() {
  @Override
  public void handle(ActionEvent t) {
    try {
      panCenterPrev = (Pane) root.getCenter();
      panCenterAct = Customer.listCustomer();
      root.setCenter(null);
      root.setCenter(panCenterAct);
      Customer.btCanc.setOnAction(new EventHandler<ActionEvent>() {
        @Override public void handle(ActionEvent e) {
          try {
            Customer.Fim();
            panCenterAct.getChildren().clear();
            panCenterAct = null;
            root.setCenter(null);
            root.setCenter(panCenterPrev);
          } catch (Throwable ex) {
            Logger.getLogger(Customer.class.getName()).log(Level.SEVERE, null, ex);
          }
        }             
});

クラス 顧客

public class Customer
{

  public static Pane listCustomer() throws SQLException, ClassNotFoundException
  {
    ...
    final ObservableList<MyCustomer> data = FXCollections.observableArrayList();
    ...
  }

  public static class MyCustomer {
    private final SimpleIntegerProperty idcl;
    private MyCustomer(Integer pIdcl ) {
      this.idcl = new SimpleIntegerProperty(pIdcl);  
    }

    public Integer getIdcl() {
         return idcl.get();
    }

    public void setIdcl(Integer pIdcl) {
        idcl.set(pIdcl);
    }
  }  

  public static void Fim() throws Throwable {
    ...
    rs = null;

    tbViewCL.getItems().clear();
    tbViewCL = null;
    colIDCL.getColumns().clear();
    colIDCL = null;
  }

  ...

  protected void finalize() throws Throwable {
    try{
      ...
      rs.close();
      ...// Never happens... why??  
    } catch(Throwable t) {
        throw t;
    } finally {
        JOptionPane.showMessageDialog(null,"End?");
        super.finalize();
    }
  }

よろしく

4

1 に答える 1

0

Javaは通常、使用したメモリが収まると判断したときにそれを再利用するため、オブジェクトをファイナライズしても、メモリが残っている可能性があります。ただし、rs.Close()実行されない場合は、スローと例外が発生する前に何かが原因である可能性があります。コードをチェックして、何も実行されていないことを確認することをお勧めします。また、例外をキャッチした場合は、ログに記録することをお勧めします。あなたは何が起こっているのかを知ることができます。

于 2012-11-16T21:00:37.387 に答える