Thread sleep dentro do método actionPerformed

Primeiro de tudo, quero dizer que estou ciente de que essa abordagem está errada, então estou fazendo essa pergunta por causa da pura curiosidade. Vamos dizer que eu tenho um aplicativo de swing como este:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class ThreadSleeping {
    JFrame frame = new JFrame();
    JPanel panel = new JPanel();
    JButton button = new JButton("Load");
    JLabel label = new JLabel();

    public ThreadSleeping() {
        panel.add(button);

        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent arg0) {
                label.setIcon(new ImageIcon(
                        "C:/Users/Public/Pictures/Sample Pictures/Tulips.jpg"));
                System.out.println("Tulips painted");
                try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                label.setIcon(new ImageIcon(
                        "C:/Users/Public/Pictures/Sample Pictures/Koala.jpg"));
                System.out.println("Koala painted");

            }
        });

        frame.add(panel, BorderLayout.NORTH);
        frame.add(label, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        frame.setSize(1024, 768);
        // frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new ThreadSleeping();
            }
        });
    }
}

Basicamente quando clico em umLoad botão Espero queTulips.jpg imagem exibe então GUI congela por um segundo e depois que eu espero queKoala.jpg imagem é exibida. Mas o que acontece é que: clico no botão, a interface gráfica congela por 2 segundos eKoala.jpg exibe. NãoTulips.jpg antes disso. Mas coisa que me confunde é quando eu coloco essasSystem.out.println("Tulips painted"); eSystem.out.println("Koala painted");. Então, quando eu clico no botão, ele imprime "Tulipas pintadas" e depois de 2 segundos "Koala pintado". Alguém pode me dizer o que está acontecendo aqui? Saudações.

questionAnswers(2)

yourAnswerToTheQuestion