JProgressBar

hallo,
die fortschrittsanzeige jprogressbar aktualisiert sich nicht.

mein programm durchläuft eine zählschleife und mit setvalue(zähler) sollte der balken neue werte anzeigen. zwischendurch passiert gar nichts. am ende steht dann 100%.

kann mir jemand helfen, irgendwie den fortschritt anzeigen zu lassen?

danke

hi,

kann sein das du einen eigenen Thread für die laderoutine benötigst. dieses problem hatte ich auch mal, die GUI kam mit der anzeige nicht hinterher.

gruß

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Bernd,

hallo,
die fortschrittsanzeige jprogressbar aktualisiert sich nicht.

mein programm durchläuft eine zählschleife und mit
setvalue(zähler) sollte der balken neue werte anzeigen.
zwischendurch passiert gar nichts. am ende steht dann 100%.

Das Problem ist, dass Dein Programm im Swing-Thread läuft, der auch die Aktualisierung (indirekt) durchführt. Einfach ein

SwingUtilities.invokeLater(new Runnable() { 
 public void run() {
 //do whatever you want;
 }
});

aufrufen und das ganze sollte funktionieren.

Gruss,
Frank

PS. Dann braucht man auch keinen Thread!

SwingUtilities.invokeLater(new Runnable() {
public void run() {
//do whatever you want;
}
});

hallo frank,

also ich habe einen controller und eine hauptmaske. der controller durchläuft eine schleife (test für späteren verarbeitungsblock) und ruft darin eine methode der maske auf, die ihren progressbar einen neuen wert verpasst (progressbar.setvalue(zaehler)).

! controller.java !
 SwingUtilities.invokeLater(new Runnable() {
 public void run() {
 for (int a=1;a
---


    
    ! Maske !
     public void setProgressBarValue (int value){
     progressBar.setValue(value);
     }




nur bisher funktioniert das nicht, ich glaube ich habe dich nicht richtig verstanden.
hilf mir bitte.

gruß christian

Hallo Bernd,

Du musst den setProgressBarBalue durch ein invokeLater kapseln.
Durch Deinen Aufruf legst Du den SwingThread schlafen.
invokeLater erzeugt ein Ereignis in der Event-Queue von Swing, welches dann „synchron“ im Swing-Thread abgearbeitet wird.
Deine teure Berechnung kann in einem eigenen Thread gemacht werden. Nur der Aufruf maske.setPrograssBarValue … sollte entsprechend gekapselt werden.

Gruss,
Frank

also ich habe einen controller und eine hauptmaske. der
controller durchläuft eine schleife (test für späteren
verarbeitungsblock) und ruft darin eine methode der maske auf,
die ihren progressbar einen neuen wert verpasst
(progressbar.setvalue(zaehler)).

! controller.java !
SwingUtilities.invokeLater(new Runnable() {
public void run() {
for (int a=1;a

! Maske !
public void setProgressBarValue (int value){
progressBar.setValue(value);
}

nur bisher funktioniert das nicht, ich glaube ich habe dich
nicht richtig verstanden.
hilf mir bitte.

gruß christian

Hallo Bernd/Christian?,

evtl. hilft Dir auch

Das sind Tutorials von Sun zum Thema SWING. Man sollte aber ein bißchen Englisch (einfaches Schulenglisch reicht aus) können.

Gruss,
Frank