Swing Endlosschleife blockt Frame

na

Mitglied
HI

Ich hatte folgendes Problem:
Eine Endlosschleife die von einem JFrame ausgelöst wird blockt die Aktualisierung des Frames.
Lösung: Endloschleife in neuem Thread laufen lassen.

Jetzt habe ich das Problem anders herum: Eine Endlosschleife erstellt einen neuen Frame. Dieser wird nicht richtig angezeigt, selbst wenn ich in einem neuen Thread aufrufe. Wenn ich ihn zum Test auserhalb der schleife aufrufe funktioniert alles.

Vielen Dank schon mal
 

Fab1

Top Contributor
Ich würde einfach die Schleife löschen und anschließend die 3. Zeile unter die 9. Zeile kopieren, dann sollte es wieder gehen :oops:

Nein im Ernst, bitte poste etwas Code, so kann dir hier sicherlich keiner helfen :)
 
V

vanny

Gast
Auch ohne Code ist dein Problem nachvollziehbar.
Neuer Thread, der den JFrame erstellt ist ja auch nicht der Sinn des seperaten Threads.
Du erstellst dir eine Instanz deines JFrames(diese läuft im EDT).
Die Endlosschleife lässt du in einem seperaten Thread laufen und nur die änderungen an dem GUI werden explizit in die Evetque des EDT übergeben, damit dieser nur das tut, wofür er gedacht ist(Events verarbeiten).
Andernfalls würde ich mich fab anschliessen, nur kopiere dann bitte Zeile 3 in Zeile 10, sonst bekommste ne NullCodeException.

Gruß Vanny
 

na

Mitglied
Java:
DatagramSocket ds=new DatagramSocket();
DatagramPacket paket=new DatagramPacket();
while(true){
ds.receive(paket);
byte[] data=paket.getData();
String str=new String(data);
if(str=="2"){
MyFrame mf=new MyFrame();
}
}
Das ist der Code vereinfacht, aber der Rest ist unwichtig. DatagramSocket und DatagramPacket sind richtig initialisiert, habe ich hier nur rausgelassen. MyFrame ist eine Unterklasse von JFrame. Sobald das Packet mit Inhalt "2" empfangen wird entsteht ein neuer Frame, der allerdings nicht befüllt wird, sonder nur grau ist. MyFrame ist fehlerlos. Packets werden auch richtig empfangen. Daher vermute ich das die Endlosschleife blockt.
 

pl4gu33

Top Contributor
mach mal einfach nur in der Main:

Code:
MyFrame mf=new MyFrame();

startet dein Frame dann richtig oder ist dort auch nur ein graues Fenster ? :)


... weil wenn ich in einer Testklasse nen Frame erzeuge, der in einer Endlosschleife ist, läuft er ohne Probleme und zeigt alle beinhalteten Komponenten an
 
Zuletzt bearbeitet:

Volvagia

Top Contributor
Hat es einen speziellen Grund, warum die Erzeugung des Frame nicht dem Dispatcher invoked wird? Ansonst ist der Rest des Codes sicher nicht unwichtig, sonst gäbe es ihm ja nicht.
 

na

Mitglied
der rest des quelltextes hat mit dem verbindungsaufbau zu tun und bestimmten anderen funktionen je nachdem, was der inhalt des packets ist. der datenempfang sowie die anderen funktionen funktionieren korrekt.
 

JavaProfi

Aktives Mitglied
Java:
DatagramSocket ds=new DatagramSocket();
DatagramPacket paket=new DatagramPacket();
while(true){
ds.receive(paket);
byte[] data=paket.getData();
String str=new String(data);
if(str=="2"){
MyFrame mf=new MyFrame();
}
}

Das ist der Code vereinfacht, aber der Rest ist unwichtig. DatagramSocket und DatagramPacket sind richtig initialisiert, habe ich hier nur rausgelassen. MyFrame ist eine Unterklasse von JFrame. Sobald das Packet mit Inhalt "2" empfangen wird entsteht ein neuer Frame, der allerdings nicht befüllt wird, sonder nur grau ist. MyFrame ist fehlerlos. Packets werden auch richtig empfangen. Daher vermute ich das die Endlosschleife blockt.

Vermutungen sind ganz schlecher Ratgeber!
Nicht die Schleife blockt irgendwie, sondern die Methode "receive" ist ein blockierender Methodenaufruf. Das ist auch sinnvoll, denn an dieser Stelle soll ja auf das Eintreffen eines neuen UDP-Pakets gewartet werden. Sobald ein UDP-Paket im Eingangspuffer ist, erhält die Methode "receive" ihr "return" und dein Code kann mit der nächsten Anweisung fortfahren.

Da der Aufruf blockt, darf er "nie" als Teil eines "Event-Handlers" implementiert sein oder von einem "Event-Handler" aufgerufen werden. Denn damit blockiert der EDT. vanny hatte das schon gepostet.

Zudem solltest du wie der "subterrane Lavadrache" :) es bereits geschrieben hat, einen JFrame über den EDT erwecken, z.B. mit "invokelater". Die kritische Methode ist dabei die setVisible-Metode des JFrames . Wird die bereits im Konstrutor deines JFrames benutzt, so muss du folgenden Aufruf starten:
Java:
	EventQueue.invokeLater( new Runnable() {
	  public void run() {
		  MyFrame mf=new MyFrame();
	  }
	});

Oder wenn nicht, ist das hier auch Thread-sicher:

Java:
	MyFrame mf=new MyFrame();	
	EventQueue.invokeLater( new Runnable() {
	  public void run() {
		  MyFrame.setVisible(true);
	  }
	});

Gruß
JP
 
Zuletzt bearbeitet:

na

Mitglied
@JavaProfi:
den ersten vorschlag hatte ich schon becachtet

aber vielen dank für den zweiten :)
es funktioniert jetzt perfekt :toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L JavaFX TreeView aufstellen läuft irgendwie auf Endlosschleife AWT, Swing, JavaFX & SWT 3
C Endlosschleife AWT, Swing, JavaFX & SWT 4
S Live Ticker "Endlosschleife" AWT, Swing, JavaFX & SWT 10
R Endlosschleife auf JButton druck beenden AWT, Swing, JavaFX & SWT 9
E Endlosschleife bei anklickbarer Fläche AWT, Swing, JavaFX & SWT 2
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
R [gelöst]Fenster schließen - trotz Endlosschleife in der Paint-Methode? AWT, Swing, JavaFX & SWT 3
G Checkbox, die eine Endlosschleife ausführt AWT, Swing, JavaFX & SWT 3
G Endlosschleife bei paint() + setBackground() AWT, Swing, JavaFX & SWT 2
F Endlosschleife bei drawImage() AWT, Swing, JavaFX & SWT 4
K JComboBox: Endlosschleife durch Events AWT, Swing, JavaFX & SWT 4
Fragerjava Frame inhalt komplett löschen AWT, Swing, JavaFX & SWT 4
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
Kotelettklopfer Frame ändert Farbe nicht AWT, Swing, JavaFX & SWT 12
P Swing Zufallsbilder auf Frame ausgeben AWT, Swing, JavaFX & SWT 1
D AWT Wie kann ich ein Frame von einem anderen aus beeinflussen? AWT, Swing, JavaFX & SWT 7
R 2D-Grafik Massive Frame Drops beim Benutzen von AffineTransformOp AWT, Swing, JavaFX & SWT 2
C Swing F5 Taste neu laden auf ganzen Frame AWT, Swing, JavaFX & SWT 9
J Genutzte Methoden in einen Frame einbauen AWT, Swing, JavaFX & SWT 21
H Swing Frame an andere Klassen weitergeben AWT, Swing, JavaFX & SWT 4
olfibits Swing JavaFX-Frame in JDesktopPane darstellen? AWT, Swing, JavaFX & SWT 2
F Swing Frame nach vorne holen AWT, Swing, JavaFX & SWT 2
J Panel auf Frame positionieren AWT, Swing, JavaFX & SWT 9
K Frame aus anderer Klasse schließen AWT, Swing, JavaFX & SWT 3
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
S Tastatur frame nur nur 1 mal öffnen AWT, Swing, JavaFX & SWT 1
T Swing Java-Frame bei Programmstart NICHT im Vordergrund öffnen AWT, Swing, JavaFX & SWT 2
A Programm nun in ein Frame basteln AWT, Swing, JavaFX & SWT 1
T Frame öffnet nicht AWT, Swing, JavaFX & SWT 1
A Swing GUI - Button soll Frame verändern AWT, Swing, JavaFX & SWT 4
Java_RY AWT Frame in eine eigene klasse auslagern und aufrufen AWT, Swing, JavaFX & SWT 6
S mit keylistener frame schliessen AWT, Swing, JavaFX & SWT 8
Thallius Wer oder was bestimmt welches Frame toFront kommt wenn ein anderes geschlossen wird? AWT, Swing, JavaFX & SWT 8
Z Swing Frame wird geöffnet, aber ist ohne Inhalt AWT, Swing, JavaFX & SWT 0
J Panel auf Frame löschen und neues Panel Hinzufügen AWT, Swing, JavaFX & SWT 4
D Frame beim starten eines anderen Frames schließen AWT, Swing, JavaFX & SWT 2
S NetBeans, Panel in Frame einfügen AWT, Swing, JavaFX & SWT 3
M Internal Frame in den vordergrund AWT, Swing, JavaFX & SWT 4
Tausendsassa Frame öffnet aber zeigt keinen Inhalt... AWT, Swing, JavaFX & SWT 10
Tom299 JavaFX Ähnliche Komponente wie der VB6 Frame? AWT, Swing, JavaFX & SWT 2
L Swing Frame in Thread wird nicht gezeichnet AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
D Buttons erscheinen nicht auf Frame AWT, Swing, JavaFX & SWT 2
M Swing Probleme mit Frame.pack() AWT, Swing, JavaFX & SWT 1
B Frame hängt sich auf trotz invokeLater AWT, Swing, JavaFX & SWT 1
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
M JavaFX wie kann mann sein frame mit einem Icon fersehen? AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
P Frame friert ein AWT, Swing, JavaFX & SWT 6
Z Frame mit Rechteck! AWT, Swing, JavaFX & SWT 16
Messoras JWindow/Frame durch das man durchklicken kann AWT, Swing, JavaFX & SWT 5
M Swing "Frame.setResizable(false);" verschiebt Content? AWT, Swing, JavaFX & SWT 9
X Swing 1 JButton bedeckt meine ganze Frame aber Warum? AWT, Swing, JavaFX & SWT 2
J JTable aktuallisieren über anderen Frame AWT, Swing, JavaFX & SWT 6
J JTable Zeile anklicken und neues Frame öffnen AWT, Swing, JavaFX & SWT 4
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
B JFrame immer an gleicher stelle auf anderem Frame AWT, Swing, JavaFX & SWT 5
F JAVA-EDITOR: Panel in Frame aufnehmen AWT, Swing, JavaFX & SWT 3
B Swing JMenuBar unten in der Frame setzen? AWT, Swing, JavaFX & SWT 15
U Frame zeigt keine Komponenten AWT, Swing, JavaFX & SWT 7
L JButton im Frame fest verankern AWT, Swing, JavaFX & SWT 0
D Buttons erscheinen nicht auf dem zweiten Frame AWT, Swing, JavaFX & SWT 4
X Swing Größe eines Fensters JFrame / Frame AWT, Swing, JavaFX & SWT 5
BRoll Frame- Video einbinden machbar? AWT, Swing, JavaFX & SWT 6
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
B Frame always on top nur auf anderem Frame AWT, Swing, JavaFX & SWT 9
S Aufteilung von JPanels in einem Frame AWT, Swing, JavaFX & SWT 13
K Options-Frame integrieren (zum zuschalten und wegschalten wie geht man da ran? AWT, Swing, JavaFX & SWT 7
J Frame mit Button erstellen - Warum ist es nötig, Frame über Unterklasse zu erstellen? (Reg Listener) AWT, Swing, JavaFX & SWT 2
B Swing JDialog modal, aber trotzdem Frame auswählbar AWT, Swing, JavaFX & SWT 2
N Swing Frame ungewollt transparent! AWT, Swing, JavaFX & SWT 2
J Kleines Anzeige Problem(nur blanker Frame) AWT, Swing, JavaFX & SWT 22
D Neues Frame öffnen - und dazu altes schließen AWT, Swing, JavaFX & SWT 5
Daniel_L Drop von Dateien auf Frame - welche Drop-Location? AWT, Swing, JavaFX & SWT 2
J JMenuBar ist geaddet, aber nicht im Frame. Wo ist der Fehler? (inkl. Code) AWT, Swing, JavaFX & SWT 2
C LookAndFeel Frame updated nicht vollständig AWT, Swing, JavaFX & SWT 9
K 3D-Grafik Canvas ist ein eigener Frame?! AWT, Swing, JavaFX & SWT 13
L Jbutton + jcombobox mit vorhandenen frame verknüfen AWT, Swing, JavaFX & SWT 8
J 2 Bereiche im Frame komplett nutzen - Welchen Layoutmanager? AWT, Swing, JavaFX & SWT 3
Z Swing JTextfield auf Frame AWT, Swing, JavaFX & SWT 13
N Swing Frame mit GlassPane und Popup AWT, Swing, JavaFX & SWT 5
L Frame Schließen und neustarten AWT, Swing, JavaFX & SWT 4
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
P Frame "always on top" und welche GUI? AWT, Swing, JavaFX & SWT 5
Furtano AWT mehrere Bilder in einen Frame zeichnen + Layout Manager AWT, Swing, JavaFX & SWT 10
S JMenuBar Frame Abstand AWT, Swing, JavaFX & SWT 3
J Swing Frame öffnen aus Frame mit JButton AWT, Swing, JavaFX & SWT 2
X Alte Frame-Größe beim wiederholten Aufruf AWT, Swing, JavaFX & SWT 5
M erstes Frame wartet auf die Auswertung eines zweiten AWT, Swing, JavaFX & SWT 8
J Frame-Steuerelement AWT, Swing, JavaFX & SWT 2
L Swing Flackern in Frame bei erstem Klick AWT, Swing, JavaFX & SWT 19
F Hintergrundbild im Frame AWT, Swing, JavaFX & SWT 11
S Zeichnen führt zu transparentem Frame AWT, Swing, JavaFX & SWT 6
S Swing Frame und Klasse extends JPanel - Komponenten zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 18
B Frame im Frame? AWT, Swing, JavaFX & SWT 4
C WindowListener Frame AWT, Swing, JavaFX & SWT 8
P klassenübergreifendes Frame AWT, Swing, JavaFX & SWT 6
B Text soll nich über das Frame hinausgehen AWT, Swing, JavaFX & SWT 5
J Hintergrund Label-Frame AWT, Swing, JavaFX & SWT 3
Spin JFrame/ Frame Drag and Drop AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben