Saudações
Estou com dificuldade em exibir um componente gui, que é uma classe que extende JDialog. Ela exibe mensagens e espera confirmação até um tempo parametrizado. O componente só não é exibido normalmente quando chamado dentro de um evento com loop:
Method[] methodsClass = getClassFrente().getClass().getMethods();
for (int i = 0; i < methodsClass.length; i++) {
if (isExecutable4Frente(methodsClass[i].getName())) {
setPathSaveWithMethodName(methodsClass[i].getName());
setMethodRunningName(methodsClass[i].getName());
methodsClass[i].invoke(getClassFrente(), getArcSave());
ConfirmWindowsTime.showMessageDialogTime(5, "O metódo "+getMethodRunningName()+ " foi executado");
}
}
A classe ConfirmWindowsTime funciona normalmente quando chamada fora do loop. Como não é desejável que o programa principal aguarde a confirmação para continuar o fluxo, ConfirmWindowsTime inicia uma nova thread.
Na classe ConfirmWindowsTime:
@SuppressWarnings({"SleepWhileHoldingLock", "CallToThreadDumpStack"})
public static void showMessageDialogTime(final int time, final String message) {
Thread t = new Thread(new Runnable() {
public void run() {
try {
setTimeClose(time);
final JFrame frame = new JFrame("Confirma execução.");
Container tela = frame.getContentPane();
tela.setVisible(true);
frame.setLayout(null);
frame.setSize(260, 125);
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
JLabel lbMsg = new JLabel();
JLabel lbTime = new JLabel();
JButton btOk = new JButton("Ok");
lbMsg.setText(message);
lbMsg.setVisible(true);
lbMsg.setBounds(70, 10, 150, 20);
lbMsg.setFont(new Font("Courier", Font.TYPE1_FONT, 12));
btOk.setVisible(true);
btOk.setBounds(103, 55, 50, 20);
btOk.setVisible(true);
frame.add(btOk);
frame.add(lbMsg);
frame.isActive();
frame.setVisible(true);
btOk.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent eventClick) {
frame.setVisible(false);
}
});
long timeCurrent = 0;
while (timeCurrent <= getTimeClose() && frame.isVisible()) {
Thread.sleep(1000);
timeCurrent++;
lbTime.setText(timeCurrent + "");
lbTime.setVisible(true);
lbTime.setBounds(127, 30, 10, 20);
lbTime.setFont(new Font("Monospaced", Font.PLAIN, 15));
frame.add(lbTime);
frame.repaint();
}
frame.setVisible(false);
} catch (InterruptedException eInterrupted) {
eInterrupted.printStackTrace();
} catch (Throwable eThrowable) {
eThrowable.printStackTrace();
}
}
});
t.start();
}
Alguma sugestão?
grato