View Single Post
Old 21-12-2006, 18:08   #7
bertoz85
Bannato
 
L'Avatar di bertoz85
 
Iscritto dal: Jun 2002
Città: Nella Rossa Socialista Romagna (gambettola(fc))
Messaggi: 2066
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?
bertoz85 è offline   Rispondi citando il messaggio o parte di esso