3

私は Java の学習の初心者段階です。私が今まで読んだすべてのドキュメントで、Java はメモリ ポインターの代わりにセキュアな参照を使用してオブジェクトにアクセスすると述べています。また、メソッドが戻ると、そのローカル スコープの変数がガベージ コレクションの対象になります。

以下のコードでは、createFrame メソッドが返された後、JFrame オブジェクトがウィンドウと共に破棄されないのはなぜでしょうか?

import javax.swing.*;

public class HelloJava {
    public static void main( String[] args ) {
        createFrame();
    }

    private static void createFrame() {
        JFrame frame = new JFrame( "Hello, Java!" );
        JLabel label = new JLabel( "Hello, Java!", JLabel.CENTER );
        frame.getContentPane().add( label );
        frame.setSize( 300, 300 );
        frame.setVisible( true );
    }
}

ウィンドウが表示されるだけでなく、ドラッグ、最大化、最小化など、そのウィンドウですべてのアクションを実行できます。

4

2 に答える 2

6

EDT が実行されているためです。

詳細については、Swing での同時実行を参照してください。特に:

  • 初期スレッド

    main標準プログラムでは、そのようなスレッドは 1 つしかありません。それは、プログラム クラスのメソッドを呼び出すスレッドです。

  • イベントディスパッチスレッド

    Swing イベント処理コードは、イベント ディスパッチ スレッドと呼ばれる特別なスレッドで実行されます。Swing メソッドを呼び出すほとんどのコードも、このスレッドで実行されます。

于 2012-09-02T16:03:45.050 に答える
6

UIスレッドまたはいわゆるイベントディスパッチスレッドがJFrameオブジェクトへの参照を持ち、アクティブに使用しているため、JFrameオブジェクトは破棄されません。

于 2012-09-02T16:04:26.497 に答える