power-poler
Goto Top

Code wird nicht in reihenfolge abgearbeitet

Morgen

Habe da ein (meiner Meinung nach) sehr merkwürdiges Problem.
Und zwar wird der code nicht von oben nach unten abgearbeitet:
Also stehen habe ich:

Anweisung 1
Anweisung 2
Anweisung 3
Anweisung 4

Gemacht wird aber
Anweisung 1
Anweisung 2
Anweisung 4
Anweisung 3

Es geht genauer gesagt um ein JTextField
Ich greife den Inhalt mit ENTER ab.
Speichere den Inhalt in eine Variable TEXT
Setze den Inhalt auf "" (also auf Nichts LEER)
Gebe den Inhalt weiter.

Das Problem ist jetzt, das erst der Befehl hinter dem weitergeben ausgeführt wird, und dan der Inhalt meines JTextField (unten) auf LEER gesetzt wird.

		public void keyPressed(KeyEvent e) {
				String Test = "";  
				if (e.getKeyCode() == KeyEvent.VK_ENTER){			
					unten.setEditable(false);		
					Test = unten.getText();
					unten.setText("");  
					printText(Test)
Aber egal wo ich setText einfüge, ob in die Methode Print oder wie hier vorne dran, ob ich 20 oder 30 mal den Befehl vor Print setze, ist ihm alles egal, der Inhalt wir erst auf LEER gesetzt wenn printText ausgeführt wurde.

PrintText wandelt den String in einzelne Chars und gibt ihn mit einem wait zwischen den Chars in einem TextArea wieder aus.

Hoffe ihr habt noch eine Idee.
Mfg
Power-Poler

Content-Key: 207601

Url: https://administrator.de/contentid/207601

Printed on: April 19, 2024 at 01:04 o'clock

Member: fnord2000
fnord2000 Jun 06, 2013 at 10:11:00 (UTC)
Goto Top
Also ich habe seit etwa 10 Jahren nicht mehr Programmiert, insofern ist meine Antwort jetzt eher ein Schuß ins Blaue:
Bist du sicher, dass dein Feld nicht schon an der von dir gewünschten Stelle auf Leer gesetzt wird und lediglich die Anzeige verzögert erfolgt? Gerade bei GUI-Programmierung, also Swing und so läuft ja einiges über Threads im Hintergrund. Es kann also m.E. durchaus sein, dass das Feld bereits leer ist, aber die Anzeige selbst noch was anderes anzeigt, weil es noch nicht aktualisiert wurde.
Member: Power-Poler
Power-Poler Jun 06, 2013 at 10:23:52 (UTC)
Goto Top
Wäre natürlich auch möglich
Aber wie kann ich es dan lösen?
Habe auch schon versucht, einen wait vor print zu setzen, aber dan wartet er 1s oder so, gibt den Text aus, und dan wird das JtextField auf LEER gestellt.
Wenn ich aber vor "Test = unten.getText();" das JTextfield auf Leer setze, gehts, das Textfeld wird auf Leer gesetzt, nichts wird in Test geschrieben.
Also würde ich sagen, das du mit der Vermutung recht hast, aber wie bekomme ich es jetzt dazu, zuerst zu Aktualisieren, und dan Print auszuführen?
Member: colinardo
colinardo Jun 06, 2013 at 11:39:10 (UTC)
Goto Top
Hallo Power-Poler,
hast du mal diese Reihenfolge probiert, und anstatt das keyPressed das keyReleased-Event probiert:
Test = unten.getText();
unten.setText("");  
unten.setEditable(false);
printText(Test)

Grüße Uwe
Member: Power-Poler
Power-Poler Jun 06, 2013 at 16:19:08 (UTC)
Goto Top
Auch das brachte keine Erfolg, auch wenn KeyReleased besser ist, weil man dan die Taste nicht gedrückt lassen kann, und somit unendliche eingaben machen kann.

habe es jetzt mal so Probiert:

		public void keyReleased(KeyEvent e) {
			String Test = "";  
			if (e.getKeyCode() == KeyEvent.VK_ENTER){			
						
				Test = unten.getText();
				unten.setText("");  
				unten.setEditable(false);
				System.out.println("TEst");  
				printText(Test);

			}
Und dabei festgestellt, das egal wie lang die Eingabe ist, nach 1-2 Chars in der Konsole "TEst" ausgegeben wird
Aber erst wenn alle Chars ausgegeben sind, "unten" gelöscht wird.
Member: Power-Poler
Power-Poler Jun 07, 2013 updated at 16:41:29 (UTC)
Goto Top
Hab eine annehmbare Lösung gefunden.
		public void keyPressed(KeyEvent e) {
			if (e.getKeyCode() == KeyEvent.VK_ENTER && !("".equals(unten.getText()))){  
				Test = "";  
				Test = unten.getText();
				unten.setText("");  
			}

		}
		public void keyReleased(KeyEvent e) {
			
			if (e.getKeyCode() == KeyEvent.VK_ENTER && !(Test.equals(""))){			  
				unten.setEditable(false);
				printText(Test);
				Test = "";  
			}
		}
beim drücken der Entertaste wird der Text jetzt in eine Variable gespeichert, und gelöscht.
Beim loslassen, wird der Inhalt der Variable ausgelesen und ausgegeben.
Hab dabei auch gleich das Problem mit behoben, das es möglich war Leere Texte abzuschicken face-smile