Я попытался показать изображение в течение 3 секунд, а затем переключился в Java, но его не работает - PullRequest
0 голосов
/ 18 декабря 2018

Я пытался создать программу, которая показывает изображение в течение 3 секунд, а затем переключает его, но вместо того, чтобы показывать первое изображение, подождите, а затем покажите второе изображение, его ожидание покажет первое изображение, а затем покажет второе спасибо за помощь

        JLabel image = new JLabel("");
        image.setBounds(100, 20, 125, 200);
        contentPane.add(image);
        image.addMouseListener(new MouseAdapter() {
              public void mouseClicked(MouseEvent me) {

                  image.setIcon(one);

                  try {

                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                  image.setIcon(two);

              }

            });

1 Ответ

0 голосов
/ 19 декабря 2018

Попробуйте что-то вроде этого:

image.setIcon(one);
javax.swing.Timer timer = new Timer(3000, new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
    image.setIcon(two);
    timer.stop();
  }
});

Убедитесь, что вы используете javax.swing.Timer, а не java.util.Timer, так как вы обновляете компонент пользовательского интерфейса Swing.Таймер Swing выполняет свой обратный вызов в потоке диспетчеризации событий (EDT).

С учетом сказанного рассмотрите возможность использования SwingWorker для долгосрочных задач (т. Е. Если файлы изображений в вашем примере большие).В docs рекомендуется выполнять только небольшие / короткие задачи с использованием подхода, описанного выше.

...