# Problem mit setVisible



## 123markus123 (3. Nov 2012)

Hallo, ich habe ein Problem mit setVisible. In meinem Programm wird diese Methode aufgerufen:


```
private void loescheOrdner() {

        button.setVisible(false);

        try {
            Thread.sleep(3000);
        } catch (InterruptedException ex) {
            Logger.getLogger(Benutzeroberflaeche.class.getName()).log(Level.SEVERE, null, ex);
        }

        feld.setVisible(false);
        leiste.setVisible(true);

        int prozent = 0;

        while (prozent < 100) {
            leiste.setValue(prozent);
            try {
                Thread.sleep(Math.round(Math.random()) * 100);
            } catch (InterruptedException ex) {
                Logger.getLogger(Benutzeroberflaeche.class.getName()).log(Level.SEVERE, null, ex);
            }

            prozent++;
        }
    }
```

Bei feld handelt es sich um ein JLabel, leiste ist eine JProgressBar und button ein JButton. Vor der Methode ist leiste unsichtbar, button und label sind sichtbar.

Obwohl schon vor der while Schleife die Sichtbarkeit der Objekte geändert werden sollte, geschieht das bei der Ausführung erst, nachdem die Methode beendet ist. Während der while Schleife ändert sich nichts. Woran liegt das und wie kann ich das so machen, wie es sein soll?

Ich hoffe ihr könnt mir helfen 
Markus

P.S.: Auf dem ersten Bild im Anhang sieht man das JFrame vor und während der Methode, auf dem zweiten Bild ist das JFrame nach der while Schleife.


----------



## TKausL (3. Nov 2012)

Wird die Methode vom EDT ausgefüht?


----------



## 123markus123 (3. Nov 2012)

Was ist EDT? (Bin noch Anfänger )


----------



## TKausL (3. Nov 2012)

Zeig mal bitte etwas mehr Code, vorallem die Stellen von wo aus die Methode loescheOrdner aufgerufen wird.


----------



## 123markus123 (3. Nov 2012)

Hier wird die Methode loescheOrdner aufgerufen:


```
private void naechsterText() {
        try {

            BufferedReader r = new BufferedReader(new FileReader(System.getProperty("user.dir") + "\\src\\virus\\Texte.dat"));
            BufferedReader s = new BufferedReader(new FileReader(System.getProperty("user.dir") + "\\src\\virus\\Buttons.dat"));
            try {

                for (int i = 0; i < nr; i++) {
                    r.readLine();
                    s.readLine();
                }

                button.setText(s.readLine());
                feld.setText(r.readLine());

                nr++;

                if (nr == 15) {
                    loescheOrdner();
                }

            } catch (IOException ex) {
                Logger.getLogger(Benutzeroberflaeche.class.getName()).log(Level.SEVERE, null, ex);
            }

        } catch (FileNotFoundException ex) {
            Logger.getLogger(Benutzeroberflaeche.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
```

Die Methode naechsterText wird in dem ActionListener von button aufgerufen.


----------



## TKausL (3. Nov 2012)

Das bringt mich nicht weiter...
mach mal bitte

```
System.out.println(Thread.currentThread().getName());
```
am anfang der loescheOrdner und poste was angezeigt wird.


----------



## 123markus123 (3. Nov 2012)

Dann kommt: AWT-EventQueue-0


----------



## TKausL (3. Nov 2012)

Sorry, hatte das


> Die Methode naechsterText wird in dem ActionListener von button aufgerufen.


überlesen.

Führe NIEMALS Code der eine gewisse Zeit braucht im EDT aus.
Erstelle dafür einen neuen Thread oder einen [japi]SwingWorker[/japi].


----------



## 123markus123 (3. Nov 2012)

Wenn du mir jetzt noch sagst, was ein EDT ist, dann ist das Thema erledigt


----------



## TKausL (3. Nov 2012)

Der EDT ist der Thread der für die GUI zuständig ist.
Er "zeichnet" sie auf den Bildschirm, erkennt Klicks auf Buttons usw.
Wenn er einen Klick erkennt ruft er deine Methode auf. Während er deine Methode allerdings abarbeitet kann er währenddessen natürlich nicht die GUI zeichnen, sodass du irgendwelche Änderungen der GUI nicht siehst. Erst wenn er mit deiner Methode durch ist kann er wieder seinen eigentlichen Aufgaben nachgehen und die GUI neu zeichnen.


----------



## 123markus123 (3. Nov 2012)

Danke


----------



## vanny (3. Nov 2012)

123markus123 hat gesagt.:


> Wenn du mir jetzt noch sagst, was ein EDT ist, dann ist das Thema erledigt



Ohne dir zu nahe treten zu wollen, aber wenn du EDT , mal mit der Maus überfährst, wirst du sehen, wofür diese Abkürzung steht und wenn du das dann hier in der Forensuchfunktion oder mit dem Wort "Java" zusammen bei google eingibst wirst du nur geradezu von Erklärungen überschwemmt.

Benutze bitte immer erst diese Möglichkeiten, dich selbst über gewisse Dinge zu informieren, und poste dann konkrete Fragen, wenn du nichts vernünftiges finden kannst.
Das macht es dir und den Helfern hier etwas leichter.

Gruß Vanny


----------

