Progressbar 'springt nicht an'

ObiKenobi

Mitglied
Hallo,

ich arbeite an einem etwas komplexeren Projekt. Damit der zukünftige benutzer sehen kann das etwas 'im Hintergrund' passiert habe ich eine Progressbar eingefügt die 'interdemiate' laufen soll während die Datenabfrage läuft.

Leider springt sie aber nicht an. Woran könnte das liegen?

Java:
	class InterfaceButtons implements ActionListener, ItemListener {

		@Override
		public void actionPerformed(ActionEvent event) {
			// TODO Auto-generated method stub

			if (event.getActionCommand().equals("compare")) {
				boolean indeterminate = progressBar.isIndeterminate();
				progressBar.setIndeterminate(!indeterminate);
				
				SQLHelper.setMysqlConnectionA(hostA.getText(), portA.getText(), userA.getText(), passwordA.getText(), databaseA.getText(), schemaA.getText());
				SQLHelper.setMysqlConnectionB(hostB.getText(), portB.getText(), userB.getText(), passwordB.getText(), databaseB.getText(), schemaB.getText());
				SQLHelper.establishMysqlConnection();
				SQLHelper.checkTables();

				Results resultWindow = new Results();
				resultWindow.setMinimumSize(new Dimension(400, 500));
//				resultWindow.setLocation();
				resultWindow.generateStruct(SQLHelper.getTableData(), SQLHelper.getColumnData(),databaseA.getText(), databaseB.getText(), showall);
				resultWindow.setVisible(true);
				SQLHelper.cleanUp();
				indeterminate = progressBar.isIndeterminate();
				progressBar.setIndeterminate(!indeterminate);
			}

		}

Vielen Dank für eure Hilfe,
Grüße,
Obi
 
Du blockierst den EDT.
Der ganze Prozess muss in nem separaten Thread laufen.

Ach wie blöd. Danke 🙂

EDIT: Scheint nicht so zu klappen wie ichs verstanden hab. Kannst du mir das bitte erklären wie ich das in einen Thread auslager?

EDIT2: Hab zuerst versucht die Progressbar in einen Thread zu schreiben, was ja logischerweise nicht klappt da die SWING-Oberfläche sich ja trotzdem nciht refresehn kann (durch den Block von der Abfrage)

Habe dann versucht einfach die Abfrage in einen Thread auszulagern, hat aber leider auch nichts gebracht...
 
Zuletzt bearbeitet:
Wozu das komische hantieren mit der boolean Variable indeterminate?
An Deinem bisherigen Code lässt sich wenig erkennen, ausser dass Du - wie bereits angemerkt - mit Deiner Abfrage den EDT blockierst.
Nicht die ProgressBar muss in einen Thread, sondern längerwierige Aktionen (wie z.B. eine Datenbankabfrage) gehören in einen separaten Thread, damit diese nicht den EDT und damit die Aktualisierung der GUI blockieren.
mal so runtergeschrieben:
Java:
final JProgressBar bar = new JProgressBar();
...
new Thread(new Runnable() {
    public void run() {
        bar.setIndeterminate(true);
        //langwierige Aktion simuliert mittels sleep
        Thread.sleep(3000);
        bar.setIndeterminate(false);
    }
}).start();
 
Wozu das komische hantieren mit der boolean Variable indeterminate?
An Deinem bisherigen Code lässt sich wenig erkennen, ausser dass Du - wie bereits angemerkt - mit Deiner Abfrage den EDT blockierst.
Nicht die ProgressBar muss in einen Thread, sondern längerwierige Aktionen (wie z.B. eine Datenbankabfrage) gehören in einen separaten Thread, damit diese nicht den EDT und damit die Aktualisierung der GUI blockieren.
mal so runtergeschrieben:
Java:
final JProgressBar bar = new JProgressBar();
...
new Thread(new Runnable() {
    public void run() {
        bar.setIndeterminate(true);
        //langwierige Aktion simuliert mittels sleep
        Thread.sleep(3000);
        bar.setIndeterminate(false);
    }
}).start();

Hey Danke, hat jetzt ohne mucken und murren geklappt... hatte ausversehn einen prozess (der auch das Interface Blockiert hat) noch außerhalb des Threads stehen deshalb hat es nicht geklappt.

Grüße,
Obi
 

Zurück
Oben