Hilo dormir dentro de la acción Método ejecutado

En primer lugar, quiero decir que soy consciente de que este enfoque es incorrecto, así que estoy haciendo esta pregunta por pura curiosidad. Digamos que tengo una aplicación de swing como esta:

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();
            }
        });
    }
}

Básicamente cuando hago clic en unaLoad botón espero queTulips.jpg La imagen se visualiza, luego la GUI se congela durante 2 segundos y después de eso espero queKoala.jpg muestra la imagen. Pero lo que sucede es que: hago clic en el botón, la GUI se congela durante 2 segundos yKoala.jpg muestra NoTulips.jpg antes de que. Pero lo que me confunde es cuando pongo esosSystem.out.println("Tulips painted"); ySystem.out.println("Koala painted");. Así que cuando hago clic en el botón se imprime "Tulipanes pintados" y después de 2 segundos "Koala pintados". ¿Puede alguien decirme qué está pasando aquí? Saludos.

Respuestas a la pregunta(2)

Su respuesta a la pregunta