ProgressBar öffnen und schließen klappt nur einmal

Angiii

Erfahrenes Mitglied
Hallo,

mein Applet kann verschiedene Messwerte auslesen. Da das Messen immer einige Zeit braucht, will ich die Restdauer der Messung mit einer ProgressBar anzeigen. Sobald ich die Messung starte, soll die Statusanzeige angezeigt werden, sobald die Messung beendet ist soll die Anzeige wieder verschwinden. Eigentlich nicht kompliziert. In den Grundzügen funktionierts auch - jedoch nur für die jeweils erste Messung.

Wenn ich nach Beendigung der ersten Messung eine zweite Messung durchführen will, wird zwar die Messung ausgeführt, die dazugehörige ProgressBar wird aber nicht mehr angezeigt. Also bei der ersten Messung funktioniert alles super, bei den weiteren erscheint die ProgressBar (bzw. das Panel in der sie sich befindet) nicht.

Die Progressbar befindet sich mit anderen Elementen in einem Panel was mit folgender (gekürzter) Klasse beschrieben wird:
Code:
public class ProgressBar extends JPanel  {
	public JPanel panel = null;  
	public JProgressBar bar = new JProgressBar( 0, 37);
	
	public ProgressBar() {
		super(new BorderLayout());
		initialize();
	}

	private void initialize() {
          this.setLayout(new BorderLayout());
          this.add(bar, BorderLayout.SOUTH);
	}
}

Das Ganze binde ich wie folgt in meine Hauptklasse ein:
Code:
public ProgressBar pb = new ProgressBar();

private JPanel getJContentPane() {
		if (jContentPane == null) {
			// ....
			jContentPane.add(pb);
			pb.setBounds(new Rectangle(2, 2, 160, 71));
			//....
		}
	return jContentPane;
}

Und so wird es aufgerufen:
Code:
public void getCurrentParameters () {
       pb.setVisible(true);
       pb.validate();
		
	do_something();
		
        pb.setVisible(false);		
}

Im Prinzip soll das Panel im dem sich die ProgressBar befindet jeweils sichtbar und unsichtbar sein. So ist zumindest mein Ansatz, der leider nur zur Hälfte funktioniert.

Weiß jemand woran das liegen könnte? Oder hat jemand eine besser Idee? So ganz gefallen tut mir das sichtbar/unsichtbar im Moment nämlich noch nicht....
 
Ich hab zumindest eine Teil des Problems gefunden:

Code:
public void getCurrentParameters () {
       pb.setVisible(true);
       pb.validate();
		
	do_something();
		
        pb.setVisible(false);		
}
In der obigen Funktion wird im Moment zuerst "do_something()" umgesetzt, dann pb.setVisible(true) und dann aber auch schon pb.setVisible(false), auch wenn es in anderer Reihenfolge im Code steht. Anscheinend kommt Eclipse mit den Funktionsaufrufen durcheinander. Im Moment versteh ich jedenfall gar nichts mehr.

EDIT: Noch ein Nachtrag: Wenn ich die Sichtbarkeit mit pb.isVisible() teste, wrid immer der richtige Zustand angezeigt. Sehen tu ich trotzdem nichts. Kann es sein das die Zustandsanzeige irgendwo im Hintergrund läuft? Wenn ja, wie bringe ich diese wieder in den Vordergrund?
 
Zuletzt bearbeitet:
Hat niemand eine Idee? Wie schon gesagt, das an- und abschalten der ProgressBar funktioniert anscheinend, nur sehen tu ich nichts.
 
wen das an und auschlaten funktioniert nur es nicht angezeigt wird ruf doch wens wieder angeschaltet wird die repaint(); funktion auf da sollte sie wieder auftauchen wen das alles neu gezeichnet wird.

ich habe das ganze mal so gelöst ( ähnliches problem)

Code:
Timer timer = new Timer(intervall, this);

dan den ganzen timer starten mit timer.start();

Code:
public void actionPerformed(ActionEvent e) 
{
repaint();

//bzw Visible wieder true setzten und dan repaint
}

dan ruft er immer im intervall den du angiebst die actionPerformed klasse auf und repaintet dan. dan sollte deine Progressbar auch wieder angezeigt werden.

Gruß
 
Hallo,

danke für deine Antwort. Leider funktionierte dein Ansatz bei mir nur teilweise. Die ProgressBar wird erst geöffnet, nach dem alle Funktionen die sie überwachen soll bereits ausgeführt wurden. Dazwischen tut sich leider nichts.
 
seas Angii sry war im urlaub deswegen erst mein später post ;)

kannst du evt mal deinen qulle text posten ich habe da evt eine vermutung.

Ohne ist das immer bissel schwer ;) da meine Kristall Kugel zurzeit nicht Funktioniert ;)

Gruß
 
Den gesamten Quelltext will ich hier niemanden antun, aber ich versuche die wichtigsten Teile mal so kompakt wie möglich zu posten:

Das Panel mit der Progress Bar:
Code:
public class ProgressBar extends JPanel {
	public JProgressBar bar = new JProgressBar( 0, 37);
	
       public ProgressBar() {
	     this.setLayout(new BorderLayout());
             this.setSize(new Dimension(275, 49));
             this.add(bar, BorderLayout.SOUTH);
             this.bar.setValue(30);
             this.setVisible(true);
	}
}

Der Aufruf der ProgressBar erfolgt in der Funktion getCurrentParameters():
Code:
public ProgressBar pb = new ProgressBar();

public void getCurrentParameters () {
	pb.setVisible(true);
	pb.repaint();
	
	for ( ID = 5; ID<37; ID++){
			pb.bar.setValue( ID );
			sendCommand((byte) ID,(byte) -1, (byte) 5, (byte) 5);
	}
	pb.bar.setValue(100);
	pb.setVisible(false);
}

In der Funktion getCurrentParameters() werden verschiedene Initalwerte ausgelesen. Dazu werden per "sendCommand" entsprechende Anfragebefehle losgeschickt. Die ProgressBar zeigt den Status dieser Abfragen.

Code:
public synchronized void sendCommand (byte functionID, 
		byte value, 
		byte sendLength, 
		byte expectedReceiveLength){
 try {
	deviceA.send(sendarray(functionID, value, sendLength));
        
        while (readFlag == false){
	      // warten auf Antwort...TBD
	 }
	 readFlag = false;
 } catch (Exception Ex){//...};
}

Das scheinen für mich die relevantesten Teile zu sein. Kann aber gerne auch noch den Rest hier posten, Hautpsache es hilft ;-)
 
Ich hab die letzten Tage viel rumgespielt und dutzende Beispiele versucht, aber bei eigentlich allen tritt der selbe Fehler auf. Die ProgressBar will sich einfach nicht blicken lassen - jedenfalls sobald ich sie in ein Applet integriere. Das einzige was funktionierte war ein "ProgressMonitor". Diesen will ich aber nicht verwenden, da er mir zu unflexibel ist.
 
So nach langen hin und her hab ichs doch noch geschafft. Ich sag nur "SwingWorker". Mein Applet lief an sich super, nur kam es mit der darstellung nicht hinterher, da die anderen Prozesse das blockierten...

Manchmal macht mich Java echt fertig ;-)
 

Neue Beiträge

Zurück