У меня есть метод, выполнение которого может занять много времени. Назовем его longTime();
Этот метод вызывается из прослушивателя действий на кнопке.
Я хочу отображать сообщение "Please wait.."
во время выполнения этого метода.
Проблема в том, что Jframe
не отвечает, кажется, что он застрял или чего-то ждет.
Важное примечание. Время работы longTime()
может быть разным. Проблема появляется только тогда, когда это занимает более 2-3 секунд.
Я пытался сделать все это в invokeLate
, но это не помогло.
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
JLabel label = new JLabel("Please wait...");
label.setFont(new Font("Serif", Font.PLAIN, 25));
frame.getContentPane().add(label, BorderLayout.CENTER);
frame.setLocationRelativeTo(null);
frame.setUndecorated(true);
frame.pack();
frame.setAlwaysOnTop(true);
frame.setVisible(true);
try{
longTime(); //HERE IS THE FUNCTION THAT TAKES A LONG TIME
}catch(Exception e){ }
frame.dispose(); //AFTER THE LONG FUNCTION FINISHES, DISPOSE JFRAME
}
});
Есть идеи, как это исправить?