Чтобы установить задержку нажатия кнопки в Java?

У меня есть кнопка сохранения вJFrame при нажатии сохранить «сохранить» наборы текста для "сохранения ...."; Мне нужно установить этот текст как «сохраненный»; после задержки 10 секунд. Как это возможно в Java? Пожалуйста помоги...

<code>try {
    Thread.sleep(4000);
} catch (InterruptedException e) {

    e.printStackTrace();
}
</code>

Это то, что я сделал ... но это не будет отображаться как "сохранение" в течение этого задержанного времени.

 kleopatra10 апр. 2012 г., 11:51
ничего дружелюбного в том, чтобы заставлять пользователя ждать ненужного ;-)
 kleopatra10 апр. 2012 г., 11:02
спать на EDT неправильно, всегда .. Это похоже на домашнюю работу, не так ли :-)
 Anonymous10 апр. 2012 г., 13:33
Ваш пример ближе к:a) Пользователь нажимает кнопку и больше ничего не может сделать во время выполнения действия, и должен увидеть какой-нибудь визуальный сигнал о ходе выполнения?b) Пользователь нажимает кнопку (которая становится отключенной до завершения действия) и продолжает выполнять действия, пока действие выполняется в фоновом режиме, и в конце концов уведомляет пользователя о завершении?
 Andrew Thompson10 апр. 2012 г., 10:42
// TODO Auto-generated catch b  Пожалуйста, удалите шум, как это из размещенного кода. Фактически, по логике он должен быть удален, как только вы сделаете что-то в этом методе. Кроме того, то, что вы сделали внутри метода, это +1. :)
 Anuradha10 апр. 2012 г., 11:48
@kleopatra Я так не думаю .. Мне нужно сделать приложение удобным для пользователя, а не использовать окно сообщения. Мой вид не работает. Вот почему я разместил здесь ...... !!!

Ответы на вопрос(3)

http://developer.apple.com/library/mac,/documentation/java/reference/javase6_api/api/java/util/Timer.html#schedule(java.util.TimerTask, долго). Используйте таймерную задачу, чтобы обернуть ваш работоспособный объект и все.

 10 апр. 2012 г., 11:34
@kleopatra не хочет объяснить, почему это неправильный таймер?
 10 апр. 2012 г., 11:02
неправильный таймер (по крайней мере, без особой осторожности :-)
 10 апр. 2012 г., 11:36
Текст должен быть обновлен на EDT. Таймер Swing позаботится об этом, но ваша ссылка ссылается на java.util.Timer, и в этом случае вы должны вручную выполнить вызов на EDT (например, используяSwingUtilities.invokeAndWait)

Use a JProgressBar to show something is happening. Set it to indeterminate if the length of the task is not known, but presumably you know how much needs to be saved and how much is currently saved. Don't block the EDT (Event Dispatch Thread) - the GUI will 'freeze' when that happens. Use a SwingWorker for long running tasks. See Concurrency in Swing for more details.
 10 апр. 2012 г., 11:08
+1 я согласен чтоJProgressBar это путь Вопрос о работе немного странный (либоhomework или странные требования) - нужно подождать 10сек ... Но чтобы ответить на его вопрос об ожиданииTimer делает работу
 10 апр. 2012 г., 11:10
Хорошая точка зрения. Клеопатра попросила разъяснений, мне будет интересно увидеть ответ ФП.
 Anuradha10 апр. 2012 г., 11:53
@ Аноним Спасибо за вашу помощь, я столкнулся с этим как часть моей работы над проектом, и это не странные требования для меня ...
Решение Вопроса

ом, что что-то происходит (и, возможно, дать намек на прогресс), тогда перейдите кJProgressBar а такжеSwingWorker (больше деталей).

Если, с другой стороны, вы хотите иметь ситуацию, когда пользователь нажимает кнопку, и задача должна выполняться в фоновом режиме (в то время как пользователь выполняет другие действия), то я бы использовал следующий подход:

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {                                          
        button.setEnabled(false); // change text if you want
        new SwingWorker<Void, Void>() {
            @Override
            protected Void doInBackground() throws Exception {
                // Do the calculations
                // Wait if you want
                Thread.sleep(1000);
                // Dont touch the UI
                return null;
            }
            @Override
            protected void done() {
                try {
                    get();
                } catch (Exception ignore) {
                } finally {
                    button.setEnabled(true); // restore the text if needed
                }
            }                    
        }.execute();
    }
});

Наконец, первоначальное решение, которое использовалоSwing specific timer:

final JButton button = new JButton("Save");
button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {                                          
        // Take somehow care of multiple clicks
        button.setText("Saving...");
        final Timer t = new Timer(10000, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent evt) {
                button.setText("Saved");
            }
        });
        t.setRepeats(false);
        t.start();
    }
});
 Anuradha10 апр. 2012 г., 09:57
конечная задержка int = 10000; // миллисекунды final ActionListener taskPerformer = new ActionListener () {public void actionPerformed (ActionEvent evt) {//... Выполнить задачу ... btnNewButton_5.setText (& quot; Saving ..... & quot;); }}; окончательный таймер t = новый таймер (задержка, taskPerformer); t.setRepeats (ложный); t.start (); Но это также не работает. Он устанавливает этот текст только по истечении времени задержки.
 10 апр. 2012 г., 11:47
@ AndrewThompson: иногда это должно быть сделано определенным образом, и другого пути нет (кроме смены работы).
 Anuradha10 апр. 2012 г., 11:22
@ Аноним это работает .. Спасибо ...
 10 апр. 2012 г., 11:07
@ Anuradha, пожалуйста, не добавляйте код в комментарий (он не читается, как вы видите :-), вместо этого отредактируйте свой вопрос. В любом случае, если это не работает, что-то не так с вашим кодом в другом месте - время для SSCCE
 10 апр. 2012 г., 11:07
"The best option to answer your specific question.."  Лучший вариант - указать, что это неправильный подход. Возможно, вы заметили это (мое мнение) из моего ответа. ;)

Ваш ответ на вопрос