Diskuze: "neposloupné" volání metod

Java Java "neposloupné" volání metod

Avatar
jaryn
Člen
Avatar
jaryn:

Zdravím!
Po stisknutí tlačítka volám metodu send()
ta vypadá zhruba takto:

private void send() {
        try {
            jButton1.setEnabled(false);
            connect = new AdMailerConnector(...);
            ...
            AdMailer mailer = new AdMailer(...);
            mailer.send();
        } catch (MessagingException | IOException ex) {
                     Logger.getLogger(AdMailerWindowMain.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Vtip je v tom, že chci, aby se po stisku tlačítko jButton1 disablovalo. Bohužel k tomu dojde až po odeslání emalu.
Proč tomu tak je?
Díky za vysvětlení

 
Odpovědět 16.8.2013 18:35
Avatar
Odpovídá na jaryn
Luboš Běhounek (Satik):

Protože samotná změna stavu komponenty ještě komponentu nepřekreslí, to se děje až při zpracovávání fronty zpráv (tipuji to na WM_PAINT) a to se děje až po skončení funkce stisku tlačítka, protože to běží v jednom vlákně.

Nevím, jak to řeší Java, ale zkus hned po řádku

jButton1.setEnabled(false);

volat nějakou obdobu C# Application.Do­Events() nebo Delpháckého Application.Pro­cessMessages() (google napoví - "Java Application.Pro­cessMessages()").

Editováno 16.8.2013 19:10
Nahoru Odpovědět 16.8.2013 19:09
:)
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.