Text erscheint nicht im lade-Dialog

Status
Nicht offen für weitere Antworten.

Doomrunner

Mitglied
Hi,

ich lade beim Start meines Programms diverse Daten aus einer externen Datenbank. Das dauert schon einige Sekunden, und deshalb würde ich gerne in der Zwischenzeit einen Startdialog anzeigen.

Dieser Dialog wird auch ohne Probleme geöffnet. Allerdings wird der Text, der da drin steht erst angezeigt, wenn alles geladen ist. Muss ich den Main-Thread kurz schlafen legen, damit der Text gezeichnet wird, oder was kann ich da machen?

Hier mein Code:

Code:
        ...
        frame = new GUIFrame(this);
        
        // Start Dialog anzeigen:
        StartDialog start = new StartDialog(new javax.swing.JFrame(), false);
        start.setVisible(true);   
        
        // Kunden aus der Datenbank laden
        kundendbController = new KundendbController(this);
        Vector neu = kundendbController.getKundenFromDB("");
        
        ...
       
        // Hauptfenster anzeigen
        frame.setVisible(true);
 

MPW

Top Contributor
joa..ein klassischer Fall von Swing is nicht Thread sicher...Lösung: AWTEventQue, brauchst du ein Beispiel?
 

Doomrunner

Mitglied
Danke für die Antworten... Ein Beispiel wäre sehr gut :D

Wobei: Bis dahin nutze ich gar keine Threads.... Das ist ja das komische. Doch bevor der Text angezeigt wird, scheint er schon die anderen Befehle zum Laden auszuführen.
 

MPW

Top Contributor
Hab' ich mir schon gedacht:

Code:
class TThread extends Thread {
	public TThread() {
	}
	public void run() {
		try {
			EventQueue.invokeAndWait( new Runnable() {
				public void run() {
                            //Hier den Code für das Fenster rein!
				}
			});
		} catch (InterruptedException e) {
		} catch (InvocationTargetException e) {
		}
	}
}
new Thread( new TThread()).start();

Also, das ganze ist ein bissle kompliziert, da die Eventque aus einem eigenen Thread, bzw. anderem Thread als dem ActionListener ausgeführt werden muss.

Somit, hab' ich einfach eine innere Klasse gebaut..die du einfach innerhalb deiner platzieren kannst und unten drunter, letzte Zeile, wird diese dann aufgerufen...

In der run-Methode kannst du nun denen Code platzieren. Das ganze ist im Prinzip nur dazu da, dass gewartet wird, bist das Fenster auch angezeigt wird, anschließent lässt du die Sachen aus den Dateien laden und lässt dann das Fenster, was natürlich vorher global deklariert sein muss, disposen...
 

MPW

Top Contributor
Doomrunner hat gesagt.:
Danke für die Antworten... Ein Beispiel wäre sehr gut :D

Wobei: Bis dahin nutze ich gar keine Threads.... Das ist ja das komische. Doch bevor der Text angezeigt wird, scheint er schon die anderen Befehle zum Laden auszuführen.

^^Genau, das ist halt der Grund, warum Swing nicht Threadsicher ist, genau das selber Problem hatte ich auch mal und mit obigen Quellcode gelöst..
 

Doomrunner

Mitglied
Hm.. jetzt öffnet er den Start-Dialog erst, wenn er alles andere mit öffnet...

Habe ich das jetzt falsch eingebunden?

Code:
    /** Konstruktor */
    public Main() {
        try {
            javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception e) { }
        
        frame = new GUIFrame(this);
        
        new Thread(new TThread()).start();
                
        // Kunden aus der Datenbank laden
        kundendbController = new KundendbController(this);
        Vector neu = kundendbController.getKundenFromDB("");
        
        ....
        
        frame.setVisible(true);
    }

    class TThread extends Thread {
        public TThread() {
        }
        
        public void run() {
            try {
                EventQueue.invokeAndWait( new Runnable() {
                    public void run() {
                        StartDialog start = new StartDialog(new javax.swing.JFrame(), false); 
                        start.setVisible(true);
                    }
                });
            } catch (InterruptedException e) {
            } catch (InvocationTargetException e) {
            }
        }
    }
 

MPW

Top Contributor
Ich weiß nicht was genau du da machst...mit welcher Methode werden denn die Daten geladen?(Übrigens sollte das auch in einem Thread gemacht werden)
Wird das denn erst angezeigt, wenn du frame.setVisible(true) sagst oder wann...
 

Doomrunner

Mitglied
Also:

Beim laden der Datensätze passiert folgendes:

Es werden die Datensätze aus einer entfernten MySQL-Datenbank geladen. Diese Daten werden in Objekte gekapselt... Danach wird dann ein TableModel erstellt, welches schließlich in ein Panel gebracht wird, das dann in dem frame-Objekt angezeigt werden soll.

=> Die Daten werden also erst sichtbar, wenn frame.setVisible(true); aufgerufen wurde.

Und ich will einfach nur ein Dialog angezeigt bekommen, solange die Daten geladen werden. Danach soll sich dieser dann schließen (das habe ich bisher noch nicht gemacht, ist aber kein Prob).

Das einzige Problem was ich halt habe, ist, dass der Text in dem Dialog nicht angezeigt wird, da der Paint-Befehl des Dialogs scheinbar eine zu niedrige Priorität hat (schätze ich mal).
 

Doomrunner

Mitglied
Ok, habe es jetzt hinbekommen. Ich lasse das Fenster jetzt einfach zuerst direkt in der public Static void main() erzeugen. Dann übergebe ich das Fensterobjekt und schließe es dann in der Klasse. :D

Vielen Dank auf jeden Fall für die gute Hilfe.

Hier noch der Code-Schnipsel, falls es wen interessiert:

Code:
    public Main(StartDialog start) {
        try {
            javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
        } catch (Exception e) { }
        
        frame = new GUIFrame(this);
                
        // Kunden aus der Datenbank laden
        kundendbController = new KundendbController(this);
        Vector neu = kundendbController.getKundenFromDB("");
        
        ...
        
        start.dispose();
        frame.setVisible(true);
    }

...

    public static void main(String[] args) {
        final StartDialog start = new StartDialog(new javax.swing.JFrame(), false); 
        start.setVisible(true);
                
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Main(start);
            }
        });
    }
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Mit jsoup Text aus HTML-Datei rausgrabben Allgemeine Java-Themen 29
C EML Email Text in String wandeln Allgemeine Java-Themen 11
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
M Thymeleaf th value und th text Allgemeine Java-Themen 1
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
_user_q Eingegebenen Text wiederholt schreiben lassen Allgemeine Java-Themen 9
G Darstellung von Text auf MapContext von GeoTools Allgemeine Java-Themen 2
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
izoards Bestimmter Text aus PDF extrahieren Allgemeine Java-Themen 3
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
K HTMLEditor HTML Text in Rich Text umwandeln Allgemeine Java-Themen 14
kodela JDialog zeigt Text nicht an Allgemeine Java-Themen 5
L Text filtern Allgemeine Java-Themen 1
Bluedaishi TEXT Kodierung Allgemeine Java-Themen 3
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
S Ini Text aus String parsen Allgemeine Java-Themen 1
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
I Text suchen und ersetzen im Word Dokument Allgemeine Java-Themen 3
windl Text mining / deep learning Allgemeine Java-Themen 0
I Text aus Input-Box entnehmen und zuweisen Allgemeine Java-Themen 1
KeexZDeveoper Text Mining Allgemeine Java-Themen 3
L Input/Output Wie kann man in der Konsole einen Text farbig ausgeben z.b in grün Allgemeine Java-Themen 6
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
A Datenexport (Text und Draw) Allgemeine Java-Themen 1
L Text von txt auf JTextArea Allgemeine Java-Themen 4
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T itext: text in ein textfeld hinzufügen Allgemeine Java-Themen 2
B Farbiger Text in der Konsole Allgemeine Java-Themen 1
K Pdf mit dynamischem Text mit iText Allgemeine Java-Themen 0
D Text Analyzer Allgemeine Java-Themen 2
RalleYTN Audiodatein(.ogg/.wav) in Text konvertieren Allgemeine Java-Themen 0
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
S Text in mehreren Sprachen korrekt darstellen? Wie waehle ich die Fonts aus..? Allgemeine Java-Themen 0
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
M Text in erstelltes Excelfile schreiben Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
P HTML Text bearbeiten Allgemeine Java-Themen 1
B JFrame Text Ausgabe Allgemeine Java-Themen 7
G Makierter Text in Arbeitsspeicher Allgemeine Java-Themen 2
B Text in die Mitte der Konsole schreiben. Allgemeine Java-Themen 1
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
P iText Text zentrieren Allgemeine Java-Themen 3
J Verschlüsselung von Text? Allgemeine Java-Themen 2
M Text datei in java jar datei einbinden Allgemeine Java-Themen 4
S Swing Text in eine JTextArea schreiben Allgemeine Java-Themen 17
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
S Robuste Methode um Text von HTML code zu extrahieren..? Allgemeine Java-Themen 6
achillesat Rich Text Editor Allgemeine Java-Themen 2
M CMD-Text anzeigen Allgemeine Java-Themen 10
G Text Mining Allgemeine Java-Themen 7
B Text auf Standarddrucker drucken Allgemeine Java-Themen 3
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
nrg Find and replace Text docx Allgemeine Java-Themen 6
M Ein bestimmtes Wort in einem Text zählen (String in String) Allgemeine Java-Themen 9
S Text in for Schleife in Label einfügen Allgemeine Java-Themen 4
M Funktion gesucht: Text vektorisieren Allgemeine Java-Themen 20
D Wort in Text mit >100.000 Wörter finden Allgemeine Java-Themen 7
B Text wird nicht richtig angezeigt Allgemeine Java-Themen 9
Q Text Datei einlesen Allgemeine Java-Themen 27
N .doc text ändern Allgemeine Java-Themen 12
R Komponente hat nicht die gesetzten Eingeschaften (Text, Farbe) Allgemeine Java-Themen 3
M NOA an den Source Text des Dokumentes kommen Allgemeine Java-Themen 7
A Text via RegEx durchsuchen und teile ersetzten Allgemeine Java-Themen 5
O Text mit Wildcard gegen regulären Ausdruck prüfen Allgemeine Java-Themen 3
A Umwandlung von Text/Zeichen in Polynome Allgemeine Java-Themen 8
Y Eclipse ppt Folie erzeugen + text plazieren Allgemeine Java-Themen 4
cedi Eingegebenen Text in der Konsole nicht sichtbar machen oder nur in Sternchen anzeigen Allgemeine Java-Themen 2
D markierten Text kopieren Allgemeine Java-Themen 2
P Doppeltverkettete Listen + Text Allgemeine Java-Themen 5
DEvent embedded Object Database in Text Format Allgemeine Java-Themen 5
C Datei als ASCII text einlesen ? Allgemeine Java-Themen 16
R Texterkennung - Text aus einem/r Bild/Grafik auslesen Allgemeine Java-Themen 2
M String in Html Text umwandeln Allgemeine Java-Themen 2
T eingefügter Text nach dem rendern spiegelverkehrt Allgemeine Java-Themen 2
lumo encoding einer text-datei Allgemeine Java-Themen 2
E Text ans Ende einer Textdatei anfügen Allgemeine Java-Themen 2
E JTextArea / JEditorPane + Text formatieren Allgemeine Java-Themen 3
R Java Text anderer Schriftart einlesen Allgemeine Java-Themen 2
A AES Key aus Text erzeugen Allgemeine Java-Themen 2
S Koordinaten aus einem Text filtern Allgemeine Java-Themen 11
turmaline Text aus Web-Seiten auslesen Allgemeine Java-Themen 1
MQue Graphics2D Text Allgemeine Java-Themen 2
U Text verschmelzen Allgemeine Java-Themen 8
martin82 Java-Code aus Text-Datei parsen Allgemeine Java-Themen 3
W Text curser auswählen für Paste Allgemeine Java-Themen 15
G HTML-Datei einlesen, Plain Text in Textfile speichern Allgemeine Java-Themen 4
S Bestes Text file encoding..? Allgemeine Java-Themen 36
B UTF-8 Text Allgemeine Java-Themen 3
H Passwortgschützter Text Allgemeine Java-Themen 13

Ähnliche Java Themen

Neue Themen


Oben