2

たくさんの問題を引き起こすボタンを含む Java プログラムを作成しています。ユーザーがボタンをクリックできる時間の間に遅延を作成するにはどうすればよいでしょうか (ボタンのスパムを防ぐため)。これが私が試したものです。

public void ButtonActionPerformed(java.awt.event.ActionEvent evt) {
    Thread DelayTHREAD = new Delay();
    if(DelayTHREAD.isAlive()) {
        /*do nothing*/
    }
    else {
        /*some other code*/
        DelayTHREAD.start();
    }
}
public static class Delay extends Thread /*Prevents user from spamming buttons*/ {
    @Override
    public void run() {
        try {
            Thread.sleep(5000); /*sleeps for the desired delay time*/
        }catch(InterruptedException e){
        }
    }
}

OK、ここに問題があります。遅延スレッドが開始されているかどうかは関係ありません。プログラムは引き続き実行され、遅延スレッドが存在しなかったかのように実行されたアクションを実行し続けます。

ユーザーがプログラムでボタンをスパムできないように、遅延を作成する方法を誰か教えてください。ありがとう :)

4

2 に答える 2

5

次のように、ユーザーがボタンをクリックした後、一定期間ボタンを無効にし、その後有効にする小さなメソッドを作成するだけです。

static void disable(final AbstractButton b, final long ms) {
    b.setEnabled(false);
    new SwingWorker() {
        @Override protected Object doInBackground() throws Exception {
            Thread.sleep(ms);
            return null;
        }
        @Override protected void done() {
            b.setEnabled(true);
        }
    }.execute();
}

次に、次のように actionPerformed メソッドから呼び出します。

disable(button, 5000);

EDT から呼び出すようにしてください。

于 2013-09-12T04:33:21.223 に答える