如何在按钮点击之间创建延迟(以防止按钮发送垃圾邮件)

Arc*_*Arc 1 java swing

我正在创建一个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){
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

好的,这就是问题,延迟线程是否启动无关紧要,程序仍然继续执行所执行的操作,好像延迟线程从未存在过一样.

有人请告诉我如何创建延迟,以便用户不能在程序中发送垃圾邮件按钮?谢谢 :)

sgb*_*gbj 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();
}
Run Code Online (Sandbox Code Playgroud)

然后从你的actionPerformed方法中调用它,如下所示:

disable(button, 5000);
Run Code Online (Sandbox Code Playgroud)

只要确保你从EDT打电话.