JLabel wir auf Grund zu hoher Rechenlast oft nicht angezeigt

Status
Nicht offen für weitere Antworten.

gurke1509

Mitglied
Hallo zusammen.

Folgendes Problem:
Ich arbeite an einem Programm, welches einige mathematischen Dinge ausrechnen kann.
Damit die Berechnungen später während der Laufzeit schneller ablaufen, rechnet das Programm einige Dinge schon beim Start aus.
Ein Frame soll den Benutzer darauf hinweisen.

Das Problem dabei ist, dass der Text in dem Frame in der Rechenphase zu spät oder erst garnicht angezeigt wird, bevor das Frame wieder geschlossen wird.

Hier der Code:
Code:
//Frame erstellen, welches den Benutzer auf eine kleine Wartezeit aufmerksam macht
fvorberechnung = new JFrame(lng.vorberechnung_titel);
JLabel lblvorberechnung = new JLabel(lng.lblvorberechnung);
fvorberechnung.getContentPane().setLayout(new GridLayout(1,1));
fvorberechnung.getContentPane().add(lblvorberechnung);
fvorberechnung.pack();
int top = (Toolkit.getDefaultToolkit().getScreenSize().height - fvorberechnung.getHeight()) / 2;
int left = (Toolkit.getDefaultToolkit().getScreenSize().width - fvorberechnung.getWidth()) / 2;
fvorberechnung.setLocation(top, left);
fvorberechnung.setVisible(true);

Rechner.fakultaetenAusrechnen();   //Eigentliches Ausrechnen!

fvorberechnung.setVisible(false);
fvorberechnung = null;

Ich habe auch schon versucht die eigentliche Berechnung in einem neuen Thread zu erstellen und dann mit Hilfe von join() auf diesen zu warten... aber das klappt auch nicht.
Ich könnte natürlich den Thread so eine sekunde warten lassen, aber es könnte bei anderen Rechnern ja unter Umständen auch mal länger dauern.

Gibt es da keine bessere Lösung?

Gruß Tobias
 

Leroy42

Top Contributor
gurke1509 hat gesagt.:
Ich habe auch schon versucht die eigentliche Berechnung in einem neuen Thread zu erstellen und dann mit Hilfe von join() auf diesen zu warten
Nun ja, wenn du mit join auf die Beendigung des Threads
wartest, hat es ja gar keinen Sinn einen separaten Thread zu starten.

Mach einfach:

Code:
new Thread(new Runnable() {
  public void run() {
    Rechner.fakultaetenAusrechnen();   //Eigentliches Ausrechnen!
  }}).start();
 

Leroy42

Top Contributor
Noch was:

Code:
fvorberechnung.setVisible(false);

darfst du natürlich nicht sofort nach Starten des Threads
aufrufen; es muß die letzte Anweisung innerhalb des Threads sein, also

Code:
new Thread(new Runnable() { 
  public void run() { 
    Rechner.fakultaetenAusrechnen();   //Eigentliches Ausrechnen! 
    fvorberechnung.setVisible(false);
  }}).start();
 

gurke1509

Mitglied
ok.. dass das ganze direkt angezeigt wird, funktioniert.

ABER:
Die Methode, die das ganze veranlasst, wird von einer anderen Methode aufgerufen, welches das Hauptprogramm startet. Normalerweise hat sich der "Vorberechnungsframe" nach den Berechnungen geschlossen und ANSCHLIEßEND wird das Hauptprogramm gestartet.
Das Problem mit deiner Lösung: Es kommt beides. Also es wird das Vorberechnungsframe geöffnet (mit funktionierender Schrifft) und direkt auch das Hauptframe.
Das will ich nicht :D.

Dann hätte ich noch eine Frage:
Ich starte Threads immer so:
"new Thread(){ public void run......"
Was bringt da noch ein "new Runnable()"?


MOMENT
edit1:Ich sehe gerade, dass es doch nicht funktioniert mit der Schrift. :(
edit2:es funktioniert doch :-D
 

gurke1509

Mitglied
Ariol hat gesagt.:
thread starten
berechnungen ausführen
JFrame packen und auf visible setzen.

befinden sich die letzten beiden anweisungen in der ersten, also dem thread?
ist die letzte außerhalb des threads?
welchen thread meinst du? den, der die meldung anzeigt, dass eine berechnung stattfindet, oder den hauptframe?
soll der hauptframe also aus dem thread heraus gestartet werden? dann hätte ich ja die ganze zweit zwei nebeneinander laufen, ohne dass ich es brauche.

Oder verstehe ich einfach nur das nicht, was du mir sagen möchtest :D

Um das ganze zu verdeutlichen...

Es gibt eine Methode A.
Dieses startet B und danach C.

B = Vorberechnungen und den dazu gehörigen Frame
C= Hauptframe
 

gurke1509

Mitglied
So,

Ich bin jetzt auf die Idee gekommen die Fenstererstellung UND die Berechnung in 2 Threads zu packen und dann auf den Berechnungsthread zu warten.
Aber aus irgendeinem Grund löst das nicht mein Problem.

Das ganze sieht wie folgt aus:
Code:
//Frame erstellen, welches den Benutzer auf eine kleine Wartezeit aufmerksam macht
	new Thread(new Runnable()
	{
	    public void run()
	    {
		fvorberechnung = new JFrame(lng.vorberechnung_titel);
		JLabel lblvorberechnung = new JLabel(lng.lblvorberechnung);
		fvorberechnung.getContentPane().add(lblvorberechnung);
		fvorberechnung.pack();
		int top = (Toolkit.getDefaultToolkit().getScreenSize().height - fvorberechnung.getHeight()) / 2;
		int left = (Toolkit.getDefaultToolkit().getScreenSize().width - fvorberechnung.getWidth()) / 2;
		fvorberechnung.setLocation(top, left);
		fvorberechnung.setVisible(true);
	    }
	}).start();
	
	//Berechnung starten
	Thread thberechnung = new Thread(new Runnable()
	{
	    public void run()
	    {
		Rechner.fakultaetenAusrechnen();
	    }
	});
	thberechnung.start();
	try{thberechnung.join();} catch(InterruptedException e){Logger.write(e.getMessage());}
	
	
	fvorberechnung.setVisible(false);
	fvorberechnung = null;

Warum wird das Label nicht richtig dargestellt? Denn immerhin laufen Berechnung und Frameerstellung in 2 verschiedenen Threads.
 

gurke1509

Mitglied
mmh.
Wie löse ich das Problem denn?
Ich bin schon sehr lange am überlegen.
Hoffentlich fällt mir was besseres ein.

Erklär mir nur kurz, warum GUI-Code nur was in dem Event-Dispatcher Thread zu suchen hat.
Ist der Event-Dispatcher Thread, der Thread auf dem ein Action Listener läuft?
 

Wildcard

Top Contributor
Der Event Dispatcher ist fürs Zeichnen und die Verteilung von Events zuständig.
Er ist der einzige Thread der mit Swing uneingeschränkt kommunizieren darf.
Swing ist nicht Threadsicher, daher entstehen unerklärliche Fehler wenn diese Regel nicht beachtet wird.
Und ja, ActionListener zum Beispiel laufen im EDT.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JLabel <html> mit Bild innerhalb des Textes </html> Java Basics - Anfänger-Themen 4
W ein JLabel oder JTextfield in einem Canvas-Kontext einbringen : geht das ? Java Basics - Anfänger-Themen 4
J Auf einem JLabel Linien Malen Java Basics - Anfänger-Themen 1
J neues Object (JLabel) vorab zum Layout hinzufügen , Location setzen, etc? Java Basics - Anfänger-Themen 2
J JLabel bzw. Image Icon mit KeyEvent bewgen Java Basics - Anfänger-Themen 9
GoenntHack Java Text von JLabel verändert sich nicht Java Basics - Anfänger-Themen 1
JUNSKI Zeilenumbruch JLabel Java Basics - Anfänger-Themen 1
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
K Jlabel mit itemlistevent Text gegeben, wird nicht angezeigt Java Basics - Anfänger-Themen 5
S Mit for-Schleife ein 2D JLabel-Array mit veränderbaren Icons erstellen Java Basics - Anfänger-Themen 3
Tom/S JLabel Icon Farbe Java Basics - Anfänger-Themen 2
N Variabel in eine class mit "extends JLabel" übertragen Java Basics - Anfänger-Themen 2
S Kontrollieren, ob ein Jlabel nicht sichtbar ist Java Basics - Anfänger-Themen 6
S Input/Output JLabel verschieben Java Basics - Anfänger-Themen 7
AnnaBauer21 GridBagLayout JLabel weightx: Unterschiedliche Breite mit & ohne Text Java Basics - Anfänger-Themen 6
CptK Interface JLabel bewegt sich nicht sondern teleportiert sich... Java Basics - Anfänger-Themen 3
CptK Methoden JLabel erstellen & verschieben Java Basics - Anfänger-Themen 1
T JLabel hat falsche größe Java Basics - Anfänger-Themen 1
A JLabel mit button drücken verändern Java Basics - Anfänger-Themen 6
CptK JLabel im Array Java Basics - Anfänger-Themen 2
L Threads Mit Threads JLabel ändern! Java Basics - Anfänger-Themen 2
D Methoden JButton und JLabel in einer Methode erstellen Java Basics - Anfänger-Themen 5
P Auf JLabel zugreifen Java Basics - Anfänger-Themen 12
P Erste Schritte JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 4
W JLabel, Farbe durch Listener ändern Java Basics - Anfänger-Themen 6
M Vererbung Ein JLabel einer Elternklasse anzeigen Java Basics - Anfänger-Themen 8
D Klassen Wert aus JTextfield in JLabel (andere Klasse) darstellen. Java Basics - Anfänger-Themen 60
J Array in JLabel ausgeben Java Basics - Anfänger-Themen 2
S Variablen JLabel backImagePanel Fehlermeldung Java Basics - Anfänger-Themen 3
snipesss [Java] Schriftart und Schriftgröße von JLabel in einer Zeile festlegen? Java Basics - Anfänger-Themen 3
J JLabel cannot be resolved Java Basics - Anfänger-Themen 8
S JLabel sichtbar machen/GUI Java Basics - Anfänger-Themen 3
WetWer Animation JLabel Java Basics - Anfänger-Themen 2
W aus Methode auf JLabel zugreifen und Image verändern Java Basics - Anfänger-Themen 1
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
L Variable für JLabel wird nicht erzeugt Java Basics - Anfänger-Themen 6
T Jlabel durch Text in 2 anderen Jlabels sichtbar machen Java Basics - Anfänger-Themen 4
T Objekt in ein JLabel der GUI übergeben Java Basics - Anfänger-Themen 3
S JLabel an Methode übergeben Java Basics - Anfänger-Themen 2
D Ausgabe über JLabel Java Basics - Anfänger-Themen 12
M Erste Schritte Wie speichert und gibt man Arrays aus? (JLabel) Java Basics - Anfänger-Themen 12
M Fangspiel-Probleme (JLabel, Objekt zurücksetzen) Java Basics - Anfänger-Themen 3
C Rechenaufgabe im JLabel ausrechnen Java Basics - Anfänger-Themen 2
J JLabel Icon neu zeichnen Java Basics - Anfänger-Themen 2
Z JLabel Icon ändern Java Basics - Anfänger-Themen 2
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
D JLabel ändern in actionperformed Java Basics - Anfänger-Themen 2
V jab ich eclipse verrückt gemacht :D ? array Jpanel, Jlabel Grafik Fehler / Frage Java Basics - Anfänger-Themen 5
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
G drawString/ JLabel updaten Java Basics - Anfänger-Themen 1
G mouseDragged auf Jlabel Java Basics - Anfänger-Themen 2
K JLabel zur Laufzeit dynamisch erzeugen Java Basics - Anfänger-Themen 7
M Frage zu JLabel Java Basics - Anfänger-Themen 5
T JLabel-Bilderpfad ändern... Java Basics - Anfänger-Themen 2
T JLabel anzeigen lassen... Java Basics - Anfänger-Themen 6
T Mein String in ein JLabel stecken Java Basics - Anfänger-Themen 2
Sogomn JLabel in anderer Klasse zum JFrame hinzufügen Java Basics - Anfänger-Themen 2
T JLabel zum klicken... Java Basics - Anfänger-Themen 15
W Datentypen String-Ausgabe in jLabel Java Basics - Anfänger-Themen 14
J JLabel Ausgabe Java Basics - Anfänger-Themen 3
B mouseClicked JLabel Array mitteilen Java Basics - Anfänger-Themen 6
L JLabel Icon Größe anpassen Java Basics - Anfänger-Themen 11
A Zeilenumbruch im Jlabel Java Basics - Anfänger-Themen 11
3 JLabel - Text in mehreren Zeilen zentrieren Java Basics - Anfänger-Themen 5
R JLabel imageicon jede Sekunde wechseln Java Basics - Anfänger-Themen 3
G GUI JLabel ersetzen Java Basics - Anfänger-Themen 3
M Zeilenumbruch in JLabel Java Basics - Anfänger-Themen 51
A Bildgröße automatisch auf JLabel Größe konvertieren Java Basics - Anfänger-Themen 9
S Text in einem JLabel nur zum Teil Fett Java Basics - Anfänger-Themen 2
B JLabel Text Formatierung Java Basics - Anfänger-Themen 5
J Bild auf JLabel wird nicht angezeigt Java Basics - Anfänger-Themen 11
S NullPointerException bei zweidimensionalem JLabel-Array Java Basics - Anfänger-Themen 4
T JLabel richtig anordnen? wie gehts? Java Basics - Anfänger-Themen 9
L GridLayout mit JLabel-Array füllen Java Basics - Anfänger-Themen 12
SexyPenny90 JLabel Text und Icon untereinander verwenden Java Basics - Anfänger-Themen 3
B JLabel löschen/überschreiben Java Basics - Anfänger-Themen 10
P Netbeans Platform - JLabel und JPanel setLocation Problem Java Basics - Anfänger-Themen 2
A JLabel erst auf null dann auf einen Wert setzen Java Basics - Anfänger-Themen 7
F JLabel-Background Java Basics - Anfänger-Themen 7
T JLabel Farbe ändern, Problem Java Basics - Anfänger-Themen 2
T JLabel mit Text und Bild Java Basics - Anfänger-Themen 3
C JLabel markieren Java Basics - Anfänger-Themen 2
M BeanBinding Jlist an Jlabel Java Basics - Anfänger-Themen 2
M OOP JLabel werden nicht korrekt eingefärbt Java Basics - Anfänger-Themen 6
P JLabel prüfen,... Java Basics - Anfänger-Themen 6
M JLabel auf JPanel positionieren Java Basics - Anfänger-Themen 8
P JLabel auf JFrame - Schrift vergrößern Java Basics - Anfänger-Themen 2
Z Fonts in einem JLabel Java Basics - Anfänger-Themen 7
MonsterBit setText bei JLabel Java Basics - Anfänger-Themen 16
K Zufällige Auswahl innerhalb eines Arrays und Arrays aus JLabel füllen Java Basics - Anfänger-Themen 32
D JPanel + ein JLabel Java Basics - Anfänger-Themen 8
M JLabel attribut wert zuweisen Java Basics - Anfänger-Themen 2
E JLabel deaktivieren ohne Veränderung der Darstellung Java Basics - Anfänger-Themen 2
0 Icon in JLabel Java Basics - Anfänger-Themen 6
JAVAnnik variable erhöhen bei Klick auf JLabel Java Basics - Anfänger-Themen 3
T JLabel wird nicht gesetzt in Schleife Java Basics - Anfänger-Themen 9
T aus stateChanged ein JLabel adden Java Basics - Anfänger-Themen 6
P HTML <input> Feld in einem JLabel auslesen Java Basics - Anfänger-Themen 4
C Inhalt eines Strings in JLabel ausgeben? Java Basics - Anfänger-Themen 21
T JLabel durch ActionListener ändern Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben