Fensteranzeige verzögert

Status
Nicht offen für weitere Antworten.

jupp61

Mitglied
Hallo,
ich möchte den Verlauf mehrerer Aktionen in einem Window simpel anzeigen. Das mit 'nem Fortschrittsbalken ist mir zu aufwendig.

Das Coding ist wie folgt:

Code:
// Fenster ausgeben
setVisible(true);
		
if (inFile.length() > 0){                                                // wurde Datei ausgwählt --> Verarbeitung
    outFile = writeLoad(inFile);	                                // Loaddatei erstellen
    loadData();		                                // Daten laden
    jLabelPhase1Status.setText("erledigt");		// Phase 1 ist beendet
    changeData();		                                // Daten ergänzen
    jLabelPhase2Status.setText("erledigt");		// Phase 2 ist beendet

Das Fenster sieht ungefähr so aus:

Phase 1 gestartet
Phase 2 offen
Phase 3 offen

Den Status will ich dann jeweils nach der Aktion ändern.

Problem ist, dass das Fenster allerdings sofort mit allen erledigt Stati geöffnet wird. Obwohl die Verarbeitung schon dauert.

Danke
Jupp
 
G

Gast2

Gast
da benötigst du einen Thread....und dann kannst du den Fortschritt auch ohne weitere mit einem Fortschrittbalken(JProgressbar) darstellen
 

jupp61

Mitglied
Hallo,
das mit dem Thread funktioniert nicht wie gedacht.

Was ist denn da falsch?

Code:
ImportFrame FortschrittWin = new ImportFrame();
ImportschrittWin.setVisible(true);			// Fenster anzeigen
ImportFormatierung Formatierung = 	// Formatierung starten
    	new ImportFormatierung(inFile);
    		
complete = false; 				// Schleife für Verarbeitung Phase 1
while (!complete){
    if (Formatierung.finished){
        complete = true;
    }
    try {
        Thread.sleep(50);
    } catch (InterruptedException e) { }
}

Klassen-Struktur:
Hauptklasse (Coding oben)
Fensterklasse für das Fenster mit der Fortschrittsanzeige (ImportFrame)
Formatierung (ImportFormatierung) --> enthält Thread

Fenster wird jedoch erst nach Abarbeitung der Formatierung angezeigt.

Danke
Jupp

PS: alles Gute zum Neuen Jahr
 

jupp61

Mitglied
Ich habe versucht mich an dem Bsp-Programm von Java in 21 Tagen zu halten.

Demnach habe ich für den Thread die Codierung in ImportFormatierungen vorgenommen:

Code:
public class ImportFormatierung implements Runnable{
    public boolean finished = false;

    public void run() {
        //Codierung für Formatierung (Flatfile-Verarbeitung)
       finished = true;
    }

    public String getOutFile(){
    	return outFile;
    }

    ImportFormatierung(String Filename){
    	inFile = Filename;
    	if (runner == null){
    		runner = new Thread(this);
    		runner.start();
    	}
    }
}


Danke für Support

Jupp
 

Leroy42

Top Contributor
Sieht eigentlich korrekt aus.

Was steht denn in der run-Methode?
Das was du im Eingangspost geschrieben hast?

Dann weiß ich auch nicht weiter; es sei denn deine Variable
runner ist bereits am Anfang != null. Wo ist die denn deklariert? In der
Klasse ImportFormatierung anscheinend nicht ???:L
 

jupp61

Mitglied
Hallo,
nachstehend das vollständige Coding aus dem Constructor:

Code:
    ImportFormatierung(String Filename){
    	inFile = Filename;
    	System.out.println ("runner ist : " + runner);
    	if (runner == null){
    		runner = new Thread(this);
    		runner.start();
    	}
    }

Ausgabe der Test-Print-Anweisung: runner ist : null

Da ist wohl guter Rat teuer?

Danke
Jupp
 

jupp61

Mitglied
Hallo,
ich habe mir meine Fehlerbeschreibung noch einmal angesehen.

Sie ist nicht 100%-ig korrekt. Ich hoffe, dass ich niemanden dadurch in die Irre geführt haben.

Das Fenster wird unmittelbar angezeigt. Jedoch fehlt der Dateninhalt.

Sorry soweit. Hoffe, dass das aber hilft.

Danke
Jupp
 

Leroy42

Top Contributor
Ich glaube, das ganze bringt nur dann noch Sinn, wenn du
dein Programm so zusammenkürzt, daß du es hier posten kannst.

Vielleicht bringt das Zusammenkürzen ja auch direkt schon die Lösung! :D
 

jupp61

Mitglied
Hallo,
ich habe mein Problem auch im Forum von SUN (forum.java.sun.com) gepostet und dort den Hinweis auf die neue Klasse SwingWorker von Java 1.6 erhalten. Das funktioniert ziemlich einfach - fast -, soll sagen, der Screen ist nicht mehr blockiert und der Massenupdate funktioniert im Background.

Allerdings -wie bei mir so häufig- wenn das eine funktionert gibt es gleich ein neues Problem.

Ich habe 4 Background Transaktionen, die sich der Reihe nach starten. Nach jedem Step möchte ich den Fortschritt über ein JLabel posten. Das gelingt noch nicht. Das Programm läuft zwar durch die Updateroutine, allerdings funktioniert die Anzeige nicht und das Fenster muss ich anschließend mit 4-maligen drücken des OK-Buttons schließen.

Hat jemand dazu eine Idee?

Danke
Jupp
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben