Cree un cuadro de mensaje simple que desaparece después de unos segundos en Java

Me pregunto cuál es el mejor enfoque para hacer que un cuadro de mensaje simple de estilo JOptionPane desaparezca después de mostrarse durante una cantidad determinada de segundos.

Estoy pensando en activar un hilo separado (que usa un temporizador) desde el hilo principal de la GUI para hacer esto, de modo que la GUI principal pueda continuar procesando otros eventos, etc. Pero, ¿cómo hago realmente el cuadro de mensaje en este separado? el hilo desaparece y termina el hilo correctamente. Gracias

Edit: así que esto es lo que se me ocurre siguiendo las soluciones publicadas a continuación

package util;

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

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingConstants;
import javax.swing.Timer;

public class DisappearingMessage implements ActionListener
{
    private final int ONE_SECOND = 1000;

    private Timer timer;
    private JFrame frame;
    private JLabel msgLabel;

public DisappearingMessage (String str, int seconds) 
{
frame = new JFrame ("Test Message");
msgLabel = new JLabel (str, SwingConstants.CENTER);
msgLabel.setPreferredSize(new Dimension(600, 400));

timer = new Timer (this.ONE_SECOND * seconds, this);
// only need to fire up once to make the message box disappear
timer.setRepeats(false);
}

/**
 * Start the timer
 */
public void start ()
{
// make the message box appear and start the timer
frame.getContentPane().add(msgLabel, BorderLayout.CENTER);
frame.pack();
frame.setLocationRelativeTo(null); 
frame.setVisible(true);

timer.start();
}

/**
 * Handling the event fired by the timer
 */
public void actionPerformed (ActionEvent event)
{
// stop the timer and kill the message box
timer.stop();
frame.dispose();
}

public static void main (String[] args)
{
DisappearingMessage dm = new DisappearingMessage("Test", 5);
dm.start();
}
}

Ahora la pregunta es que, como voy a crear varias instancias de esta clase a lo largo de la interacción entre el usuario y la GUI principal, me pregunto si el método dispose () limpia todo correctamente cada vez. De lo contrario, podría terminar acumulando muchos objetos redundantes en la memoria. Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta