2

私は、(まだ) 通常のウィンドウ (JFrame) と最初のメニュー項目によって呼び出される JDialog で構成される Java アプリケーションに取り組んでいます。

public class MainWindow {
    private JFrame frame;
    public MyDialog dialog;
    /* ... */
    private void initialize() {
         mnNew = new JMenuItem("New...");
         mnNew.addActionListener(new ActionListener() {
             public void actionPerformed(ActionEvent arg0) {
             dialog = new MyDialog();
             }
         });
     }
}

そしてMyDialog、次のように定義されています。

public class MyDialog extends JDialog {

    public MyDialog() {
        /* ... */
        JButton cancelButton = new JButton("Cancel");
        cancelButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                MyDialog.this.dispatchEvent(new WindowEvent(MyDialog.this,
                                            WindowEvent.WINDOW_CLOSING));
                MainWindow.window.matchMaker = null;
            }
        });
        /* ... */
        setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        setVisible(true);
    }
}

すべて正常に動作しますが、私のタスク マネージャーは、MyDialog を開いてから閉じるたびに、プログラムがより多くのメモリを消費することを報告します。なんで?

4

2 に答える 2

2

MyDialog を 1 回インスタンス化します。

public class MainWindow {
   private JFrame frame;
   private final MyDialog dialog = new MyDialog();

setVisible(true)MyDialog コンストラクターで削除します。

ダイアログを表示するには、次のようにしますsetVisible( true )

于 2013-04-07T13:59:03.707 に答える