package games.strategy.engine.framework.ui.background; import java.awt.BorderLayout; import java.awt.Color; import java.util.Timer; import java.util.TimerTask; import javax.swing.JWindow; import javax.swing.SwingUtilities; import javax.swing.border.LineBorder; public class WaitWindow extends JWindow { private static final long serialVersionUID = -8134956690669346954L; private final Object m_mutex = new Object(); private Timer m_timer = new Timer(); private boolean m_finished = false; public WaitWindow() { setSize(200, 80); final WaitPanel mainPanel = new WaitPanel("Loading game, please wait."); setLocationRelativeTo(null); mainPanel.setBorder(new LineBorder(Color.BLACK)); setLayout(new BorderLayout()); add(mainPanel, BorderLayout.CENTER); } public void showWait() { final TimerTask task = new TimerTask() { @Override public void run() { SwingUtilities.invokeLater(() -> toFront()); } }; synchronized (m_mutex) { if (m_timer != null) { m_timer.schedule(task, 15, 15); } } } public void doneWait() { synchronized (m_mutex) { if (m_timer != null) { m_timer.cancel(); m_timer = null; } } SwingUtilities.invokeLater(() -> { setVisible(false); removeAll(); dispose(); }); m_finished = true; } public boolean isFinished() { return m_finished; } }