SWT - TextFeld automatisch aktualisieren

Status
Nicht offen für weitere Antworten.
G

gigalogisch

Gast
Hallo!

Ich bin richtig froh, mal auf ein Forum gestoßen zu sein, das sich auch mit SWT beschäftigt! :)

Eine GUI soll Werte aus einer Datenbank anzeigen - wäre eigentlich kein Problem, allerdings aktualisieren sich die Werte in der DB im Schnitt jede Sekunde.
Mit der genauen Funktionsweise will ich euch auch gar nicht belasten. Im Moment bin ich nämlich noch am Testen zwischen der Performance von Swing und der von SWT.
Im Moment geht es mir nur darum, welches von beiden (Swing, SWT) 300 Textfelder schneller aktualisieren kann. (Und das halt nicht nur einmal, sondern z. B. 1000 mal um die Zeit zu messen)
Das heißt ich habe eine Schleife in der von 0 - 1000 gezählt wird und darin noch einmal eine Schleife, die mir jedes Textfeld mit einer Zufallszahl aktualisiert.

Welche GUI das dann schneller bewerkstelligen kann, hat "gewonnen" ;-)
In Swing habe ich diese GUI schon fertig und läuft auch einwandfrei, nur in SWT bereitet sie mir arg Probleme.

Ich bringe es einfach nicht zum laufen, dass ein TextFeld ständig aktualisert wird.

Vielleicht hat jemand von euch eine Idee?
Mir wäre schon sehr geholfen, wenn mir jemand eine Schleife liefern könnte, die von 1 bis 1000000 zählt und wo ich die Zahl des jeweiligen Schleifendurchlaufs in einem TextFeld hoch sausen sehen kann.
Denn es muss doch gehen, nur bekomme ich es in SWT einfach nicht hin. Habe schon einige Tage damit gespielt, bekomme aber alle möglichen Ergebnisse, nur nicht das was ich will. Z. B. Zählt er bei mir im Hintergrund hoch und zeigt die Zahl 1000000 erst dann an - ich will aber jede Zahl einzeln sehen.

Vielen, vielen Dank!!!

Willi
 

Wildcard

Top Contributor
Wo ist das Problem? Ein Thread der Display.getDefault().asyncExec aufruft und dort dann text.setText(deinCounter)
 
G

gigalogisch

Gast
Hallo nochmal,

hab mir da jetzt mal ein bisschen was zusammengesucht.

Code:
		Thread someThread = new Thread() {
		    public void run() {
		    	Display.getDefault().asyncExec(???) {
							// Daten für den gegebenen Namen aus ArrayList holen
		    				Text TextFeldObj = this.nativeGet(3); //hier findet er meine Methode nativeGet nicht mehr (The method is undefined for the Type newThread)
		    				// Schreibt Zufallszahl in Textfeld
		    				TextFeldObj.setText(Model.getValue());
		                }
		    	}
			};
		}

Die Frage ist, was ich hinter asyncExec in die Klammern schreiben muss, und warum er mein nativeGet nicht mehr findet.
Muss ich diesen Block innerhalb einer Methode schreiben oder außerhalb?

Vielen Dank und sorry, mit Threads kenn ich mich leider überhaupt nicht aus.

Willi
 

Wildcard

Top Contributor
da schreibst du new Runnable rein. this bezieht sich dann auf das Runnable und das hat keine solche Methode. Klassenname.this.nativeGet(3)
 
G

gigalogisch

Gast
Hallo Wildcard,

vielen Dank für deine schnelle Antwort!
Hab wieder ein bisschen "rumgedoktort" und bekomme den Fehler "Cannot instantiate the type Runnable" nicht weg...

Hier mein Code:
Code:
	Thread someThread = new Thread() {
	    public void run() {
	    	Display.getDefault().asyncExec(new Runnable()); {
				// Daten für den gegebenen Namen aus ArrayList holen
	    		Label TextFeldObj = SWTView.this.nativeGet(3);
	    		// Schreibt Zufallszahl in Textfeld
	    		TextFeldObj.setText(Model.getValue());
	    	}
		}
	};

Diesen Code habe ich innerhalb einer Klasse, aber nicht innerhalb einer Methode eingesetzt. Das stimmt so, oder?

Vielen Dank nochmal

Willi
 

Wildcard

Top Contributor
Code:
     Display.getDefault().asyncExec(new Runnable() {
            // Daten für den gegebenen Namen aus ArrayList holen
             Label TextFeldObj = SWTView.this.nativeGet(3);
             // Schreibt Zufallszahl in Textfeld
             TextFeldObj.setText(Model.getValue());
          });
Der äussere Thread ist sinnlos.
 
G

Guest

Gast
Hallo Wildcard,

habe deine Version genommen - allerdings schmiss mir Eclipse da auch wieder Fehler, habe ein bisschen rumprobiert und noch "public void run() {" eingebaut - jetzt schmeißt mir zumindest Eclipse keine Fehler mehr.

Jetzt müsste ich nur noch in diese run()-Methode "reinkommen".

Ein Methodenaufruf einfach nur mit run(); funktioniert nicht (is undefined)

Hier nochmal der Codeschnippsel:
Code:
	//Aktualisiert bereits vorhandene TextFelder beliebig oft
	public void UpdateTextFelder(String wastun) {
		System.out.println("LULU");

		Display.getDefault().asyncExec(new Runnable() {
			public void run() {
				System.out.println("HUHU");

				// x = bestimmtes TextFeld
				for (int x = 0; x < SWTView.this.getSizeOfArrayList(); x++) {
    				// Daten für den gegebenen Namen aus ArrayList holen
    				Label TextFeldObj = SWTView.this.nativeGet(x);
    				// Schreibt Zufallszahl in Textfeld
    				TextFeldObj.setText(Model.getValue());
				}
			}
		});
	}

So wie hier codiert schmeißt (zumindest) Eclipse keine Fehler mehr.
Wenn ich die Methode UpdateTextFelder aufrufe wird LULU ausgegeben, HUHU aber nicht - ist auch logisch, weil die Methode run() nicht aufgerufen wurde. Nur wie rufe ich die auf?

Danke!!
 

Wildcard

Top Contributor
Richtig, hatte das run vergessen (run wird automatisch aufgerufen). Deine Schleife macht so allerdings keinen Sinn, da alles der Code des Runnables vom UI Thread aufgerufen wird. Du würdest den Thread also eine Weile blockieren und dann wird der letzte Zustand angezeigt.
 
G

gigalogisch

Gast
Hallo,

kannst du mir das bitte noch einmal erklären?
Hab das leider nicht verstanden :-/
Was macht wo keinen Sinn? Was kann ich dagegen machen?

Vielen Dank!

Willi
 

Wildcard

Top Contributor
Ach moment.. hatte mich verlesen. DU iterierst ja über Textfelder, nicht über Werte.
Müsste also funktionieren.
 
G

gigalogisch

Gast
... aber wie rufe ich dieses Teil jetzt auf, so das auch was passiert damit? :(

Danke
 
G

Guest

Gast
Oh - hab vergessen noch diesen Code mit einzubauen

Code:
		 display.readAndDispatch();
		 try {
		 Thread.sleep(250);
		 } catch (InterruptedException e) {
		
		 }

Nichts desto trotz hauts einfach nicht hin. Bzw. es haut nun schon hin - allerdings nur mit Labels (Ich wollte aber Text), und auch nur mit dem FillLayout Manager - egal welchen anderen LayoutManager ich ausprobiert habe wurde mir nichts angezeigt.
Schreibe ich alles in Text (also für TextFelder) um, so wird mir nur das Endergebnis präsentiert. D. h. er werkelt vor sich hin und erst wenn er fertig ist, bekomme ich in meinem TextFeld die letzte generierte Zufallszahl zu sehen. Ich will aber jede Zufallszahl in jedem Schleifendurchlauf sehen. Mit Labels funktionierts komischerweise. Auch ein shell.redraw() in der Schleife hilft nichts.

Und was mich auch sehr verdutzt, SWT (mit Labels) braucht mehr als doppelt solange wie Swing die Zufallszahlen anzuzeigen. Wobei man ja generell sagt, SWT sollte schneller sein.

Ich bin am verzweifeln. Es kann doch nicht so schwierig sein, einfach mal ein TextFeld anzuzeigen, dass immer aktualisiert den Text anzeigt, den der Zufallszahlgenerator generiert.

In Swing ist das überhaupt kein Problem und mit SWT ärgere ich mich schon seit Tagen und habe noch überhaupt keine Aussichten auf Erfolg.

Willi
 

Wildcard

Top Contributor
Der Code ist so nicht richtig.
Code:
	while (!shell.isDisposed ()) {
		if (!display.readAndDispatch ()) display.sleep ();
	}
Schreibe ich alles in Text (also für TextFelder) um, so wird mir nur das Endergebnis präsentiert. D. h. er werkelt vor sich hin und erst wenn er fertig ist
Dann würde ich sagen, verwendest du die Threads falsch. Hast du denn nun einen Background Thread der die Daten besorgt und mit asyncExec an die GUI übergibt?
In Swing ist das überhaupt kein Problem und mit SWT ärgere ich mich schon seit Tagen und habe noch überhaupt keine Aussichten auf Erfolg.
SWT ist nicht schwieriger als Swing, aber manchmal muss man sich eben etwas einlesen bevor man Code Zeilen runterklopft. Das asyncExec Konzept ist ebenfalls identisch mit Swing (invokeLater). Wenn dir das nichts sagt, ist auch deine Swing GUI nicht korrekt.
 

Wildcard

Top Contributor
Warum ist der Code so nicht richtig? Genau so steht er in den meisten Tutorials die es zu SWT gibt?
250 Millisekunden erscheint mir elend lang für einen UI Thread. Ich kenne nur die Display#sleep Variante.
Du brauchst einen anderen Thread, der muss aber nebenläufig sein und nicht einfach um das Runnable rum.
Ein Thread ist der UI Thread, der mit readAndDispatch und einer liest Daten, und schreibt sie über Display#asyncExec in die Widgets.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
C TextFeld in Verbindung zur ComboBox automatisch aktualisieren AWT, Swing, JavaFX & SWT 7
A combobox automatisch in ein textfeld wechseln AWT, Swing, JavaFX & SWT 3
C Textfeld automatisch befüllen AWT, Swing, JavaFX & SWT 6
T Datum in Textfeld automatisch formatieren AWT, Swing, JavaFX & SWT 8
D Button und Textfeld Darstellung AWT, Swing, JavaFX & SWT 3
B Scene Builder Textfeld Begrenzen AWT, Swing, JavaFX & SWT 3
T JavaFX MultiLine / MultiStyle Textfeld AWT, Swing, JavaFX & SWT 1
izoards Textfeld für Zeit AWT, Swing, JavaFX & SWT 4
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
B Ausgaben einer Umrechnung vom Textfeld in ein Label AWT, Swing, JavaFX & SWT 2
Z Swing Wert aus Textfeld auslesen -- null Fehler AWT, Swing, JavaFX & SWT 4
J SWT Textfeld markieren und kopieren AWT, Swing, JavaFX & SWT 0
A Swing nur Zahlen im Spinner(Textfeld) eingeben ! AWT, Swing, JavaFX & SWT 16
L Ein Actionlistener für ein Textfeld, anstatt viele Actionlistener für ein Textfeld AWT, Swing, JavaFX & SWT 7
karlmasutra JavaFX Verzeichnispfad wählen und an Textfeld übergeben AWT, Swing, JavaFX & SWT 2
J Text in ein Textfeld eingeben und speichern AWT, Swing, JavaFX & SWT 27
cool_brivk24 Großes Textfeld AWT, Swing, JavaFX & SWT 8
J Textfeld nicht sichtbar AWT, Swing, JavaFX & SWT 2
P Knopf gedrückt -> Textfeld befüllen AWT, Swing, JavaFX & SWT 9
P Variable einer Eingabe in anderes Textfeld schreiben AWT, Swing, JavaFX & SWT 7
T [Neuling] Textfeld Inhalt überprüfen und falsche Stellen als msg Ausgeben AWT, Swing, JavaFX & SWT 1
V Swing Eingabe aus Textfeld abholen AWT, Swing, JavaFX & SWT 6
K Swing Textfeld verstecken aber benutzen AWT, Swing, JavaFX & SWT 15
J Swing Strings werden nicht in Textfeld geschrieben AWT, Swing, JavaFX & SWT 8
P Anfängerproblem mit Textfeld AWT, Swing, JavaFX & SWT 6
C Textfeld und Label werden nicht angezeigt (Ubuntu) AWT, Swing, JavaFX & SWT 2
F Textfeld Währungszahlen und automatische Aktualisierung AWT, Swing, JavaFX & SWT 14
R AWT AWT Textfeld durch Klick auf Button erstellen? AWT, Swing, JavaFX & SWT 3
D JavaFX Textfeld Eingabe validieren AWT, Swing, JavaFX & SWT 5
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
T SWT Button soll nur sichbar sein,wenn im Textfeld der Focus ist AWT, Swing, JavaFX & SWT 4
A Textfeld.append/.setText ohne Funktion AWT, Swing, JavaFX & SWT 2
G Text im textfeld in einem Editor anzeigen AWT, Swing, JavaFX & SWT 18
A Swing Zwei Klassen mit Textfeld Eingaben vergleichen und Ausgabe erzeugen AWT, Swing, JavaFX & SWT 10
N JavaFX Textfeld nur Zahlen und nur von 5 bis 30 AWT, Swing, JavaFX & SWT 11
D Eigenes Textfeld AWT, Swing, JavaFX & SWT 8
D textfeld string zu float AWT, Swing, JavaFX & SWT 5
C Swing Button in Textfeld (JFormattedTextField) AWT, Swing, JavaFX & SWT 7
A Textfeld nachträglich einfügen AWT, Swing, JavaFX & SWT 4
D JSlider und Textfeld AWT, Swing, JavaFX & SWT 2
E Textfeld auslesen AWT, Swing, JavaFX & SWT 2
G Swing Formatiertes Textfeld mit Trennzeichen AWT, Swing, JavaFX & SWT 2
T Swing URL übergabe aus einem Textfeld AWT, Swing, JavaFX & SWT 17
L SWT Textfeld AutoCompletion AWT, Swing, JavaFX & SWT 3
SexyPenny90 NumberFormatException Textfeld AWT, Swing, JavaFX & SWT 4
P SWT Toolbar mit nur einer Schaltfläche und einem Textfeld AWT, Swing, JavaFX & SWT 2
S Swing Textfeld Sonderzeichen Blockiern AWT, Swing, JavaFX & SWT 2
alex_fairytail Swing Textfeld Action wenn geschrieben wird? AWT, Swing, JavaFX & SWT 6
C SWT Textfeld mit festem und variablen Inhalt AWT, Swing, JavaFX & SWT 13
J Textfeld Rotation AWT, Swing, JavaFX & SWT 2
C Live Suche mit TextFeld AWT, Swing, JavaFX & SWT 2
maddin86 Eingabe in Textfeld 1 synchron in Textfeld 2 ausgeben AWT, Swing, JavaFX & SWT 9
R JDateChooser Datumseingabe via TextFeld wird verworfen AWT, Swing, JavaFX & SWT 8
W Daten auf Textfeld in anderer Klasse verwenden AWT, Swing, JavaFX & SWT 4
A aus einem Textfeld in double parsen AWT, Swing, JavaFX & SWT 10
A TextField: Textfeld teilweise editierbar AWT, Swing, JavaFX & SWT 2
1 Textfeld auslesen AWT, Swing, JavaFX & SWT 11
G Swing Komponente gesucht (Textfeld mit Liste) AWT, Swing, JavaFX & SWT 2
C SWT: Mehrere Formatter in einem Textfeld AWT, Swing, JavaFX & SWT 6
D Markierter Text in Textfeld AWT, Swing, JavaFX & SWT 3
L SWT Darstellung des Datums in Textfeld? AWT, Swing, JavaFX & SWT 2
M SWT Breite von Textfeld nur ohne Layout änderbar AWT, Swing, JavaFX & SWT 2
H Ausgabe an Textfeld JTextField AWT, Swing, JavaFX & SWT 3
F In Textfeld Kommazahl anzeigen aber ohne Komma eingeben AWT, Swing, JavaFX & SWT 14
D textfeld mit 0 bis n ziffern AWT, Swing, JavaFX & SWT 11
D SWT String aus Textfeld auslesen und in eine Tabelle speichern AWT, Swing, JavaFX & SWT 5
C Button/Textfeld mit Variable verknüpfen AWT, Swing, JavaFX & SWT 4
X Eingabe in Textfeld soll Button aktivieren... AWT, Swing, JavaFX & SWT 12
S SWT Bei Auslösen eines Buttones ein Textfeld generieren AWT, Swing, JavaFX & SWT 2
T SWT String mitten ins Textfeld einfügen + richtige Cursorposition AWT, Swing, JavaFX & SWT 3
N Textfeld füllen sobald es den Fokus verliert AWT, Swing, JavaFX & SWT 2
M SWT Wie Textfeld hinzufügen, nach Auswahl von einem bestimmten Combobox-item? AWT, Swing, JavaFX & SWT 3
M Bilder in einem Textfeld darstellen AWT, Swing, JavaFX & SWT 2
D Objekt (Map) in Textfeld ausgeben AWT, Swing, JavaFX & SWT 10
O Intwerte in Textfeld dastellen AWT, Swing, JavaFX & SWT 4
T Textfeld autmoatisch aktualisieren AWT, Swing, JavaFX & SWT 5
G CellEditor - Kein "Textfeld" AWT, Swing, JavaFX & SWT 6
O [SWT] Autocomplete bei Textfeld in PreferencePage AWT, Swing, JavaFX & SWT 2
M Prüfen, ob in einem Textfeld/Tabelle eine Eingabe erfolgt is AWT, Swing, JavaFX & SWT 11
F addSelectionListener für ein Textfeld AWT, Swing, JavaFX & SWT 10
K Textfeld wird nur jedes zweite Mal aktualisiert AWT, Swing, JavaFX & SWT 3
V Shortcuts nicht im Textfeld AWT, Swing, JavaFX & SWT 2
A Fokus in ein Textfeld setzen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Werte in ein Textfeld übernehmen AWT, Swing, JavaFX & SWT 4
A Fehler beim Auslesen aus einem Textfeld AWT, Swing, JavaFX & SWT 2
C Komme nicht an mein textfeld AWT, Swing, JavaFX & SWT 3
B Textfeld, Rollbaken: Eingabe klappt nicht AWT, Swing, JavaFX & SWT 2
P Textfeld einbinden AWT, Swing, JavaFX & SWT 4
P TextFeld Focus entfernen AWT, Swing, JavaFX & SWT 2
7 Zeilenumbruch in Textfeld AWT, Swing, JavaFX & SWT 3
S Textfeld soll auf Änderungen von nutzer und program reagiern AWT, Swing, JavaFX & SWT 3
G Datensätze aus DB in TextFeld ausgeben AWT, Swing, JavaFX & SWT 18
F Wie Oberfläche verbessern? (JButtons, Textfeld verkleinern) AWT, Swing, JavaFX & SWT 5
K Textfeld Programm soll auf Eingabe warten! AWT, Swing, JavaFX & SWT 4
M In Textfeld Textbereiche sperren? AWT, Swing, JavaFX & SWT 2
N SWT Textfeld und Verifylistener AWT, Swing, JavaFX & SWT 11
D Textfeld mit unterschiedlichen Formatierungen AWT, Swing, JavaFX & SWT 3
P SWT: Textfeld an Fenstergröße anpassen AWT, Swing, JavaFX & SWT 3
G Textfeld auslesen und auf der Konsole ausgeben? AWT, Swing, JavaFX & SWT 10
J AWT-Textfeld Aussehen ändern AWT, Swing, JavaFX & SWT 13

Ähnliche Java Themen

Neue Themen


Oben