Problem mit setVisible

123markus123

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

Java:
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.
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    25,9 KB · Aufrufe: 25
  • Unbenannt1.PNG
    Unbenannt1.PNG
    13,6 KB · Aufrufe: 37
Hier wird die Methode loescheOrdner aufgerufen:

Java:
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.
 
Das bringt mich nicht weiter...
mach mal bitte
Java:
System.out.println(Thread.currentThread().getName());
am anfang der loescheOrdner und poste was angezeigt wird.
 
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.
 
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
 

Zurück
Oben