Интересно, каков лучший способ сделать так, чтобы обычное окно сообщений в стиле JOptionPane исчезало после отображения в течение заданного количества секунд.
Я думаю запустить отдельный поток (который использует таймер)сделать это из основного потока GUI, чтобы основной GUI мог продолжать обработку других событий и т. д. Но как я могу на самом деле заставить окно сообщения в этом отдельном потоке исчезать и правильно завершать поток.Спасибо.
Редактировать: вот что я придумаю, следуя приведенным ниже решениям
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();
}
}
Теперь вопрос в том, что, поскольку я собираюсь создать несколько экземпляров этого классана протяжении всего процесса взаимодействия между пользователем и основным графическим интерфейсом, мне интересно, очищает ли метод каждый раз все правильно.В противном случае я могу накопить много избыточных объектов в памяти.спасибо.