JProgressBar wird nicht richtig angezeigt

MasseElch

Aktives Mitglied
Hallo Forum,

ich habe eine Methode, die Ordner durchsucht.
Die kann ich mit setIndeterminate() so setzen, dass sie dann diesen blau laufenden Balken anzeigt. Denn ich weiß leider (aufgrund einer Rekursion) nicht, wie ich den Fortschrittberechnen soll. Darum soll einfach nur der Balken da drinne hin und her laufen.

Ich habe es auf zwei Weisen versucht:

Ich habe ein Fenster, zeige da die Bar und ein JLabel. Dann rufe ich die Methode auf, damit sie sucht, nach der Methode wird das Fenster geschlossen. Problem: Es tut sich nichts.

Java:
//Show the ProgressBar while searching
		 JFrame frame = new JFrame("Es wird gesucht");
		 frame.pack();
		 frame.setVisible(true);
		 frame.setAlwaysOnTop(true);		 
		 JProgressBar pBar = new JProgressBar();
		 pBar.setIndeterminate(true);
		 frame.add(new JLabel("Suche läuft..."));
		 frame.add(pBar);		 
		 frame.setLayout(new GridLayout(2,1));
		 frame.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2, screenHeight/2);
		 frame.setSize(230, 75);

		 //search the files
		 this.listDir(dir);
		 
		 //close Progressbar
		 frame.dispose();

Also wollte ich es mit einem Thread machen, der halt während der Suche die ProgressBar anzeigt und danach beendet.

Java:
class ShowProgressBar implements Runnable {
		public void run() {
			JFrame frame = new JFrame("Es wird gesucht");
			
			frame.setLayout(new GridLayout(2,1));
			frame.pack();
			frame.setVisible(true);
			frame.setAlwaysOnTop(true);
			
			frame.add(new JLabel("Suche läuft..."));
			JProgressBar pBar = new JProgressBar();
			frame.add(pBar);
			pBar.setIndeterminate(true);
			
			frame.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2, screenHeight/2);
			frame.setSize(230, 75);
			
			while(search) {}
			frame.dispose();
		}
	}
Java:
//new Thread
		 Thread t = new Thread(new ShowProgressBar());
		 t.start();
		 
                 this.search = false;
		 this.listDir(dir);

Dann funktioniert die ProgressBar, blöd ist aber, dass sie erst dann angezeigt wird, sobald die Methode listDir() fertig ist! Das Frame ist schon vorher da. Die ProgressBar und das Label werden erst angezeigt, nachdem die Methode durch ist. Und da ich direkt nach dem Ende der Methode die Variable Search auf false setze, wird das Fenster geschlossen. Dass die ProgressBar läuft, sehe ich nur, wenn ich search gar nicht auf false setze.

Was mache ich verkehrt?

Lg
MasseElch
 

Gucky

Top Contributor
Damit die ProgressBar flüssig läuft halte ich einen Thread, der sie steuert für besser.

Hast du schon mal debuggt? Vielleicht hast du eine Endlosschleife mit der Rekursion gebaut?
 

MasseElch

Aktives Mitglied
Hallo,

gut, dann mit dem Thread.

Die Rekursion terminiert. Hab sie vorher ohne die Progressbar laufen lassen.
Wollte die jetzt zusätzlich einfügen um den Nutzer ein Feedback zu geben, dass auch was getan wird.

Nur springt sie halt erst an, wenn die Methode terminiert und nicht, wie erhofft, während die läuft.
 

MasseElch

Aktives Mitglied
Hallo,

gut, dann mit dem Thread.

Die Rekursion terminiert. Hab sie vorher ohne die Progressbar laufen lassen.
Wollte die jetzt zusätzlich einfügen um den Nutzer ein Feedback zu geben, dass auch was getan wird.

Nur springt sie halt erst an, wenn die Methode terminiert und nicht, wie erhofft, während die läuft.

EDIT:


Es ist natürlich so rum: Hab auch grad noch mal nachgeschaut, es steht so im COde:

Java:
[//new Thread
         Thread t = new Thread(new ShowProgressBar());
         t.start();
         this.listDir(dir);
         this.search = false;
 
Zuletzt bearbeitet:

MasseElch

Aktives Mitglied
Nein leider nicht.

Also noch Mal genauer:

Ich starte den Thread, der das Frame mit der ProgressBar anzeigen soll:

Java:
//new Thread
Thread t = new Thread(new ShowProgressBar());
t.start();
this.listDir(dir);

Danach rufe ich die Methode listDir() auf.

Nun passiert folgendes:

Das Frame wird angezeigt. Aber ohne irgend ein Element drin. Es sieht aus wie ein leeres Frame. Sobald die Methode listDir() terminiert wird die ProgressBar angezeigt.

Sie soll aber während der Zeit, in der die Methode läuft angezeigt werden. Nicht erst dann, wenn die Methode ihre Arbeit fertig gemacht hat.

Hier noch ein Mal die Implementierung von Runnable:
Java:
class ShowProgressBar implements Runnable {
        public void run() {
            JFrame frame = new JFrame("Es wird gesucht");
            
            frame.setLayout(new GridLayout(2,1));
            frame.pack();
            frame.setVisible(true);
            frame.setAlwaysOnTop(true);
            
            frame.add(new JLabel("Suche läuft..."));
            JProgressBar pBar = new JProgressBar();
            frame.add(pBar);
            pBar.setIndeterminate(true);
            
            frame.setLocation(Toolkit.getDefaultToolkit().getScreenSize().width/2, screenHeight/2);
            frame.setSize(230, 75);
            
            while(search) {}
            frame.dispose();
        }
    }
 
Zuletzt bearbeitet:

HarleyDavidson

Bekanntes Mitglied
Hier hab ich mal auf die schnelle ein kleines lauffähiges Programm geschrieben (zum testen). Beim Klick auf den Button erscheint eine Progressbar...

Vielleicht kannst du anhand dieses Codes deinen Fehler finden.

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.ProgressMonitor;

/**
 *
 * @author Dominik Sust
 * @creation 11.09.2013 09:38:10
 */
public class ProgressBarTest extends JFrame
{

    public static void main( String[] args )
    {
        new ProgressBarTest().start();
    }

    private void start()
    {
        this.setSize( 300, 300 );
        this.setVisible( true );
        this.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        JButton b = new JButton( "Calculate" );
        this.add( b );
        b.addActionListener( new ClickCalculateButton() );
    }

    private class ClickCalculateButton implements ActionListener
    {

        @Override
        public void actionPerformed( ActionEvent e )
        {
            Thread t1 = new Thread( new SetProgressBar() );
            t1.start();
        }
    }

    public class SetProgressBar implements Runnable
    {

        @Override
        public void run()
        {
            ProgressMonitor _status = new ProgressMonitor( null, "Message", "Note", 0, 100 );

            for ( int j = 0; j <= 100; j++ )
            {
                try
                {
                    Thread.sleep( 40 );
                }
                catch ( InterruptedException ex )
                {
                    Logger.getLogger( ProgressBarTest.class.getName() ).log( Level.SEVERE, null, ex );
                }
                _status.setProgress( j );
            }
        }
    }
}
 

MasseElch

Aktives Mitglied
Ich habe nun den von dir vorgeschlagenen ProgressMonitor genommen und es funktioniert.

Ich weiß leider nicht wo der Fehler lag im alten Code,

aber mit dem was ich jetzt habe klappt es super.

Danke allen Helfern!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JProgressBar - wird nicht geupdated Java Basics - Anfänger-Themen 3
H JProgressBar wird nicht aktualisiert Java Basics - Anfänger-Themen 7
H Kapselung JProgressBar in JTable, aber getValueAt() greift nicht Java Basics - Anfänger-Themen 7
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
E jProgressBar auf 0 stellen Java Basics - Anfänger-Themen 1
E JProgressbar Java Basics - Anfänger-Themen 8
S JProgressbar mit individuellem Start/Endpunkt Java Basics - Anfänger-Themen 11
V Zugriff auf jProgressbar Java Basics - Anfänger-Themen 10
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
S JProgressBar richtig anwenden Java Basics - Anfänger-Themen 27
N JProgressBar Java Basics - Anfänger-Themen 8
K Threads jProgressBar update Java Basics - Anfänger-Themen 14
S jProgressBar läuft nicht! Java Basics - Anfänger-Themen 13
H Aktualisierung des JProgressBar in Abhängigkeit eines Threads Java Basics - Anfänger-Themen 5
Y jprogressbar beenden? Java Basics - Anfänger-Themen 4
L JProgressBar für FileUpload Java Basics - Anfänger-Themen 3
B Pseudo JProgressBar Java Basics - Anfänger-Themen 3
G JProgressBar - XP style Java Basics - Anfänger-Themen 4
G JProgressBar während dem ausführen einer Funktion Java Basics - Anfänger-Themen 3
S jProgressBar Java Basics - Anfänger-Themen 3
G JProgressBar Java Basics - Anfänger-Themen 2
G JProgressBar#2 Java Basics - Anfänger-Themen 2
G JProgressBar Java Basics - Anfänger-Themen 7
G jProgressBar value aus anderer Klasse heraus verändern Java Basics - Anfänger-Themen 7
B jProgressBar mit while nicht for Java Basics - Anfänger-Themen 13
K JProgressbar, zur laufzeit steuern Java Basics - Anfänger-Themen 7
V JProgressBar anklickbar? Java Basics - Anfänger-Themen 2
A Timer + JProgressBar Java Basics - Anfänger-Themen 4
G in JProgressBar Fortschritt anzeigen Java Basics - Anfänger-Themen 8
P JDialog & JProgressBar Java Basics - Anfänger-Themen 2
Z Problem mit JProgressBar Java Basics - Anfänger-Themen 4
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Warum wird hier nur etwas in eine txt Datei geschrieben und nicht in alle drei (InputStream/OutputStream/Reader/Writer) Java Basics - Anfänger-Themen 1
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
H JDK installieren jdk-21 wird nicht erkannt Java Basics - Anfänger-Themen 13
T if-else Bedingung wird ignoriert Java Basics - Anfänger-Themen 4
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
P Webseite vom Smartmeter wird nur unleserlich angezeigt Java Basics - Anfänger-Themen 7
A Warum wird mein jdk nicht gefunden? Java Basics - Anfänger-Themen 3
J jar Befehl wird nicht erkannt Java Basics - Anfänger-Themen 7
M Anonyme Klassen - Warum wird in der Konsole nichts ausgegeben? Java Basics - Anfänger-Themen 1
T catch(InputMismatchException) wird nicht ausgefürt/erkannt Java Basics - Anfänger-Themen 12
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
M Verständnisfrage: Warum wird die Datei ohne Inhalt übertragen Java Basics - Anfänger-Themen 3
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
Oneixee5 Maven Plugin wird 2 mal ausgeführt Java Basics - Anfänger-Themen 10
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
T Meine Klasse wird nicht gefunden Java Basics - Anfänger-Themen 1
T Wie kann man es machen das ein Objekt nicht übermalt wird Java Basics - Anfänger-Themen 2
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Ungültiges Datum wird nicht erkannt ?? Java Basics - Anfänger-Themen 6
schemil053 Multithread - Input verrutscht während etwas ausgegeben wird Java Basics - Anfänger-Themen 6
K REGEX - Rechnungsbetrag wird nicht richtig ausgelesen. Java Basics - Anfänger-Themen 3
_user_q Timer - ScheduledExecutorService wird schon vorher beendet Java Basics - Anfänger-Themen 5
X Erste Schritte Scanner eingabe wird übersprungen Java Basics - Anfänger-Themen 4
H Compiler-Fehler Klasse in einem Package wird nicht gefunden bzw. akzeptiert Java Basics - Anfänger-Themen 12
L Switch-Case Multiplikation wird nicht ausgegeben Java Basics - Anfänger-Themen 1
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 0
J In der Ausgabe wird ohne Eingabe in den else Block gesprungen. Java Basics - Anfänger-Themen 5
M Text wird in der Console nicht ausgegeben. Java Basics - Anfänger-Themen 11
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
S Datei anlegen Problem! Groß- und Kleinschreibung wird nicht unterschieden Java Basics - Anfänger-Themen 4
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14
sserio Math. Befehl wird rot markiert Java Basics - Anfänger-Themen 5
M Rechteck wird nicht angezeigt Java Basics - Anfänger-Themen 3
B Bungeecord | ProxiedPlayer wird nicht in ArrayList hinzugefügt Java Basics - Anfänger-Themen 1
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
S Methoden Return Rückgabewert wird nicht übergeben Java Basics - Anfänger-Themen 8
M Mein quellcode wird nicht in der Konsole ausgegeben Java Basics - Anfänger-Themen 3
I Code wird nicht ausgeführt Java Basics - Anfänger-Themen 2
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
K Präzedenregeln in Java sagen, dass +expr und -expr vor + von Addition und - von Addition stehen, warum wird dann z. B. a+b als eine Addition ausgeführ Java Basics - Anfänger-Themen 7
M Was wird hier genau getestet? Java Basics - Anfänger-Themen 9
M Wie schreibe ich eine if-Verzweigung um, so dass ein Bedingungsoperator benutzt wird? Java Basics - Anfänger-Themen 9
I Programm erkennt nicht an das Array zurückgegeben wird trotz Initialisierung *einfach* Java Basics - Anfänger-Themen 9
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
P Mein Programm wird zwar erfolgreich Compiliert, öffnet sich aber nicht Java Basics - Anfänger-Themen 6
M Referenzen zuweisen und wird gleichzeitig ausgeführt Java Basics - Anfänger-Themen 6
O System.out.println wird nicht ausgegeben? Java Basics - Anfänger-Themen 11
Zrebna Umgebungsvariable Wieso wird meine verwendete JDK-Version in der Prompt nicht erkannt? Java Basics - Anfänger-Themen 6
el_pato DialogFenster wird nicht in Schleife geöffnet? Java Basics - Anfänger-Themen 30
J if-Schleife innerhalb einer if-Schleife wird in der Konsole nicht gelesen Java Basics - Anfänger-Themen 4
P Apache Derby wird in Eclipse trotz Anbindung nicht gefunden Java Basics - Anfänger-Themen 6
H Array wird als Rückgabewert nicht akzeptiert? Java Basics - Anfänger-Themen 2
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
F Session wird mehrfach erzeugt Java Basics - Anfänger-Themen 11
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
L JScrollPane wird nicht angezeigt Java Basics - Anfänger-Themen 10
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
J JTable Titel wird nicht angezeigt Java Basics - Anfänger-Themen 6
krgewb Long wird gerundet Java Basics - Anfänger-Themen 2
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
F Wieso wird immer die falsche Mausposition angegeben? Java Basics - Anfänger-Themen 1
H GridPane wird nicht angezeigt Java Basics - Anfänger-Themen 0
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben