Вы можете перебираем активных окон, создающих этот метод класса, который вы хотите сделать это:
private Timer createTimerClose(int seconds) {
ActionListener close = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
Window[] windows = Window.getWindows();
for (Window window : windows) {
if (window instanceof JDialog) {
JDialog dialog = (JDialog) window;
if (dialog.getContentPane().getComponentCount() == 1
&& dialog.getContentPane().getComponent(0) instanceof JOptionPane){
dialog.dispose();
}
}
}
}
};
Timer t = new Timer(seconds * 1000, close);
t.setRepeats(false);
return t;
}
И после этого вы вызываете метод ateTimerClose (secondsyouwanttoclose) .start(); перед вызовом вашей JOptionPane.
Я думаю, что ключом к вопросу является 'JOptionPane'. Кроме того, вы, например, нарушаете правила единственного потока Swing, изменяя интерфейс пользователя вне контекста EDT. Если вы попробовали это из контекста «ActionListener», например, это не сработало бы, как ожидалось – MadProgrammer