Salve,
nella mia applicazione grafica, vorrei che mentre l'utente preme un bottone che esegue un metodo, appaia una jdialo con la semplice scritta "Attendere prego".
Per implementare questa cosa qui, ho trovato ispirazione in questo precedente thread.
Ho così implementato le seguenti classi:
Quella della JDialog:
codice:
package rubrica;
public class DialogToUser extends javax.swing.JDialog {
public DialogToUser(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
}
public DialogToUser() {
initComponents();
}
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle("InfoToUser");
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
jLabel1.setText("Attendere prego...");
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(24, 24, 24)
.add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 158, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addContainerGap(90, Short.MAX_VALUE))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(layout.createSequentialGroup()
.add(35, 35, 35)
.add(jLabel1)
.addContainerGap(35, Short.MAX_VALUE))
);
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
DialogToUser dialog = new DialogToUser(new javax.swing.JFrame(), true);
dialog.addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
dialog.setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
// End of variables declaration
}
La classe del Thread:
codice:
public class MyThread extends Thread{
JDialog jd;
RubricaUI r;
ContactsListPanel p;
UserProfile user = Persistence.getCurrentUserProfile();
DialogToUser dialog;
public MyThread (RubricaUI rubricaUI) {
this.r = rubricaUI;
dialog = new DialogToUser(rubricaUI,false);
dialog.setVisible(true);
}
public void run(UserProfile userProfile, String usr, String pwd) {
int secondi = 0;
try {
r.openRubrica(userProfile, usr, pwd);
while (secondi < 5) { // chiude la finestra dopo 30 secondi
secondi++;
sleep(1000); // attende 1 secondo
}
dialog.dispose();
} catch (Exception ie) {
ie.printStackTrace();
}
}
}
Ed infine nella classe dove c'è il bottone, ho il seguente codice:
codice:
private void btn_accediActionPerformed(java.awt.event.ActionEvent evt) {
.....
MyThread t = new MyThread(this);
t.run(userProfile, usr, psw_f);
t.start();
}
Quando quindi l'utente clicca sul bottone, la JDialog appare ma non visualizza la label e poi quando completa l'azione, la Jdialog si chiude.
Perchè non viene visualizzata la label della JDialog?
Avendo precedentemente provato a fare una cosa simile con la progressBar, ma senza successo (anche perchè alla fine avevo lo stesso problema che non mi visualizzava la progressBar, ma il JFrame che la conteneva sì), può dipendere da quacosa tipo dai tread?
Sto impazzendo e so che faccio impazzire pure questo forum, ma come si dice, non si finisce mai di imparare!
Le mie orecchie sono aperte ai vostri consigli!