Quote:
Originariamente inviato da PGI-Bis
Butta l'occhio al metodo show() di java.awt.Dialog (linea 485).
Per ottenere l'effetto che desideri (il blocco dell'AWT Event Dispatcher Thread) nel modo in cui vorresti, quel metodo fa cose non solo bizzarre ma, più drasticamente, non consentite nella sandbox di un'applet.
Di solitò c'è un'alternativa a tutto. Ora come ora, tuttavia, non me ne viene in mente alcuna che non sia un complicato magheggio. Aspettiamo e vediamo se qualcuno ha quale asso nella manica 
|
ti riferisci al metodo 1 vero? l'avevo immaginato. nel NET c'è un metodo Application.run che se nn ricordo male fa cose simili: avvia il message loop di sistema dal punto in cui ti trvoi, senza il bisogno di copiarlo dai sorgenti di java col pericolo che cambino ad ogni release.
comunque il codice della classe x il metodo 2 è:
Codice:
synchronized public int show(String title, String message, int buttons, boolean isError) {
prova=true;
if (isError)
jptBox = new TLPanel(title, new Color(104,10,11), new Color(234,30,34), new Color(241,79,83));
else
jptBox = new TLPanel(title, new Color(6,29,108), new Color(80,103,184), new Color(120,138,200));
jptBox.setBounds(TLStartup.centerSize(400, 100));
btn1 = new JButton("OK");
btn1.setBounds(180, 75, 40, 20);
btn1.addActionListener(new ActionListener() {
public synchronized void actionPerformed(ActionEvent e) {
prova = false;
this.notifyAll(); // faccio NOTIFY ma non mi si smuove!!!!!
}
});
jptBox.add(btn1);
//EventQueue
cnt.add(jptBox);
cnt.setComponentZOrder(jptBox, 0);
try {
while (prova)
this.wait(1000);
} catch (Exception ex) {
System.out.println(ex.toString());
}
con tanto di commento originale scritto in un attimo di nervoso

!!! faccio Notify ma rimane nella wait

ho poi inserito la variabile "prova" e sostituito il wait con un ciclo while con attesa di 1 secondo, e con questo metodo riesco ad uscire dal blocco, sebbene con un ritardo dovuto al polling - ma è sempre un accrocchio schifoso che non sfrutta gli strumenti id java...
perchè nn funziona?