0

これを行うコードが少しあります:

  1. ActionListener を作成します

    を。アタッチ先のボタンから自身を削除します (2. を参照)。

    b. 他のいくつかのことをします

  2. その ActionListener をボタンに追加します

(コード内:)

ActionListener playButtonActionListener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        playButton.removeActionListener(playButtonActionListener);
        // does some other stuff
    }
};

playButton.addActionListener(playButtonActionListener);

コンパイル時に、Java は 4 行目をエラーとして報告(variable playButtonActionListener might not have been initialized)し、コンパイルを拒否します。これはおそらく、playButtonActionListener が閉じ括弧まで技術的に完全に初期化されておらず、removeActionListener(playButtonActionListener)playButtonActionListener が初期化された後に発生する必要があるためです。

これを修正する方法はありますか?このブロックの書き方を完全に変更する必要がありますか? または、何らかの@フラグまたは別の解決策がありますか?

4

2 に答える 2

1

変化する

playButton.removeActionListener(playButtonActionListener);

と:

playButton.removeActionListener(this);

あなたは ActionListener 匿名クラスにいるのでthis、クラスの現在のインスタンスを表します。

于 2017-01-08T21:23:10.990 に答える
1

削除するオブジェクトはリスナー自体であるため、次の方法でアクセスできますthis

    ActionListener playButtonActionListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            playButton.removeActionListener(this);
            // does some other stuff
        }
    };

    playButton.addActionListener(playButtonActionListener);
于 2017-01-08T21:23:38.917 に答える