tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
3103
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Haruka
    Haruka Haruka ist offline Mitglied Bronze
    Registriert seit
    Feb 2005
    Beiträge
    48
    Morgen!

    Ich hab da mal eine kleine Frage:
    Wenn man aufeinen Button klickt, der ein Label sichtbar macht und ein anderes unsichtbar, wird die Ansicht erst gewechselt, wenn actionPerformed() durchgelaufen ist.

    Gibt es etwas womit man sie die Sichbarkeit der Labels (sehbar) ändern kann, bevor die Funktion beendet wurde? Unter VB (*) konnte man sowas mit doEvents machen. Hat Java irgendwas änliches in der Richtung?

    Momentan hab ich dafür nur einen unschönen Workaround mit einem TimerTask

    (JDK-Version: Tiger)

    (*: Nein, ich kann mehr Sprachen als VB :P)
     

  2. #2
    Registriert seit
    Mar 2001
    Ort
    München
    Beiträge
    4.785
    Was machst du denn soviel in deiner actionPerformed() Methode?

    Wenn hier eine ganze Menge abläuft, solltest du jenes in einen
    Thread auslagern.
     
    Erst wenn der letzte Programmierer eingesperrt...
    ...und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
    -------------------
    chris: hey Tom hast du eigentlich ne Freundin
    jdar: ich bin tutorials.de Mod!

  3. #3
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Wshalb rufst du setVisible(false) an dem jeweiligen JLabel nicht schon vor Beginn der langlaufenden Logik auf?

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  4. #4
    Avatar von Haruka
    Haruka Haruka ist offline Mitglied Bronze
    Registriert seit
    Feb 2005
    Beiträge
    48
    Tom:
    Doch, mach ich natürlich, aber das ignoriert er gekonnt...
    Ich habs jetzt mit nem Thread gemacht wie Christian es vorgeschlagen hat.

    Christian:
    Ich durchparse ein Verzeichnis nach Dateien. Und jenach dem wie viele Dateien da drinne sind, kann das natürlich nen bissel dauern.
     

  5. #5
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo!

    Stimmt durch die langlaufende Aktion ist der EDT so lange beschäftigt, dass dieser gar nicht mehr zum veranlassen des Neuzeichnens kommt...

    Dann eben in einem eigenen neuen Thread:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    
    /**
     * 
     */
    package de.tutorials;
     
    import java.awt.BorderLayout;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.util.concurrent.Executors;
     
    import javax.swing.JFrame;
    import javax.swing.JLabel;
     
    /**
     * @author Tom
     */
    public class JFrameExample extends JFrame {
     
        JLabel lblA, lblB;
     
        public JFrameExample() {
            super("JFrameExample");
            setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            lblA = new JLabel("A");
            add(lblA, BorderLayout.WEST);
     
            lblB = new JLabel("B");
            add(lblB, BorderLayout.EAST);
     
            lblA.addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent evt) {
                    lblB.setVisible(false);
                    Executors.defaultThreadFactory().newThread(new Runnable() {
                        public void run() {
                            try {
                                Thread.sleep(3000L);
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                            System.out.println("finish!");
                        }
                    }).start();
                }
            });
     
            pack();
            setVisible(true);
     
        }
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            new JFrameExample();
        }
    }

    generell sollte man langandauernde Operationen NIE in Methoden der Ereignisbehandlung ablaufen lassen, da diese bis zu ihrer vollständigen Abarbeitung das neuzeichnen der GUI verhindern.

    Gruß Tom
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 15.04.09, 14:42
  2. kurze Pause mit "DoEvents" (so heiß es in vb)
    Von deusfalsus im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 24.06.08, 10:49
  3. Antworten: 8
    Letzter Beitrag: 01.04.08, 16:13
  4. "DoEvents" -> Javascript?
    Von C-H im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 20.04.06, 16:44
  5. Antworten: 3
    Letzter Beitrag: 13.05.04, 22:26