Mixmar
24-05-2007, 12:09
Salve a tutti, eccomi qui con un domandone che mi è sorto dopo aver lottato un po' con un problema.
Allora, nella mia applicazione ad un certo punto voglio fare un'operazione che coinvolge il trasferimento di dati via rete, e voglio che l'input dell'utente venga bloccato durante l'esecuzione dell'operazione, terminata la quale va sbloccato.
Avevo pensato di far comparire la classica finestrella "Operazione in corso..." o qualcosa del genere, e di bloccare la finestra sottostante con un GlassPane. Però...
Succede questo: io creo una istanza di una classe che estende JDialog, e che è identica salvo il fatto di avere una label all'interno con una scritta fissa. Poi invoco setVisible e la Dialog compare... solo che non vedo la JLabel! Ho provato ad aggiungere altri componenti, ma non accade niente: inoltre, se provo ad invocare pack() sulla JDialog prima di setVisible, la dimensione della dialog viene "ridotta", come se nemmeno avesse visto la label.
Allora ho creato un metodo main per la sottoclasse di JDialog, che semplicemente la invocava e la visualizzava, con un codice del tutto analogo a quello utilizzato nell'applicazione complessiva e... lì funziona tutto (cioè, vedo i componenti che ho inserito nel dialog)!
Dovete sapere che il dialog ha "modal = false": allora per provare l'ho impostato a "true" e... nell'applicazione ora la dialog viene renderizzata correttamente, ma l'esecuzione (delle operazioni di rete) NON prosegue finchè non ho chiuso "manualmente" la dialog stessa.
Quindi: può essere che mi sia imbattuto in un problema di thread? Del tipo: in modalità "non modale" il Dialog viene creato e visualizzato ma non riempito (non chiedetemi perchè), la grafica si blocca, l'operazione di rete viene eseguita e poi tutto viene sbloccato. Viceversa, in modalità "modale" il Dialog si blocca finchè non si è disegnato e però mi blocca tutto il resto, finchè non lo chiudo.
Idee? Suggerimenti? :help:
Allora, nella mia applicazione ad un certo punto voglio fare un'operazione che coinvolge il trasferimento di dati via rete, e voglio che l'input dell'utente venga bloccato durante l'esecuzione dell'operazione, terminata la quale va sbloccato.
Avevo pensato di far comparire la classica finestrella "Operazione in corso..." o qualcosa del genere, e di bloccare la finestra sottostante con un GlassPane. Però...
Succede questo: io creo una istanza di una classe che estende JDialog, e che è identica salvo il fatto di avere una label all'interno con una scritta fissa. Poi invoco setVisible e la Dialog compare... solo che non vedo la JLabel! Ho provato ad aggiungere altri componenti, ma non accade niente: inoltre, se provo ad invocare pack() sulla JDialog prima di setVisible, la dimensione della dialog viene "ridotta", come se nemmeno avesse visto la label.
Allora ho creato un metodo main per la sottoclasse di JDialog, che semplicemente la invocava e la visualizzava, con un codice del tutto analogo a quello utilizzato nell'applicazione complessiva e... lì funziona tutto (cioè, vedo i componenti che ho inserito nel dialog)!
Dovete sapere che il dialog ha "modal = false": allora per provare l'ho impostato a "true" e... nell'applicazione ora la dialog viene renderizzata correttamente, ma l'esecuzione (delle operazioni di rete) NON prosegue finchè non ho chiuso "manualmente" la dialog stessa.
Quindi: può essere che mi sia imbattuto in un problema di thread? Del tipo: in modalità "non modale" il Dialog viene creato e visualizzato ma non riempito (non chiedetemi perchè), la grafica si blocca, l'operazione di rete viene eseguita e poi tutto viene sbloccato. Viceversa, in modalità "modale" il Dialog si blocca finchè non si è disegnato e però mi blocca tutto il resto, finchè non lo chiudo.
Idee? Suggerimenti? :help: