зачем вам здесь две задачи? Что вы имеете в виду, имея другое задание «удалить окно сообщения»?

есно, каков наилучший способ сделать так, чтобы обычное окно сообщений в стиле 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();
}
}

Теперь вопрос заключается в том, что, поскольку я собираюсь создать несколько экземпляров этого класса в ходе взаимодействия между пользователем и основным графическим интерфейсом, мне интересно, очищает ли метод dispose () все правильно каждый раз. В противном случае я могу накопить много избыточных объектов в памяти. Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос