SWT: Anwendung sagt keine Rückmeldung

Dragowob

Grünschnabel
Hi @ll
Ich habe folgendes Problem.
Habe eine recht komplexe Anwendung mittlerweile.
Ich habe derzeit keine Threads eingesetzt.
Nun habe ich das Problem wenn ich Daten von der Datenbank hole, 'friert' mir die GUI ein auch wenn ich nun die GUI befülle und dabei eine Progressbar hochzähle ist die GUI leider immer noch 'eingefroren'.

Dabei ist die Menüzeile dann weiß und es steht 'Keine Rückmeldung'.

WIe kann ich dieses verhindern?
Vor allem wie kann ich es verhindern ohne besonders großen Aufwand.
Ich hatte mir überlegt beim start der Applikation einen Thread zu starten der mir die Shell immer mal wieder neu zeichnet. Dieses scheint aber leider nicht zu gehen oder ich habe es falsch gemacht.

Ich hoffe mir kann wer helfen
 
Hi,

ich verstehe dein Problem nicht ganz. Wie soll eine Progressbar dein einfrieren verhindern? Für mich hört sich das eher an, als ob du irgendwo in ner Endlosschleife hängst!?

Gruß, Denis
 
Die Progressbar soll nicht das einfrieren verhindern.
Die Progressbar läuft wunderbar weiter und wird gesetzt, nur die Applikation scheint noch auf die Datenbank oder irgend etwas anderes zu warten und deswegen friert sie komplett ein.

Wenn ich den Kontext der Applikation nicht verlasse funktioniert auch alles wunderbar.
Nur wenn ich einmal in ein andere Programm schalte und wieder zurück, dann tut sich in meiner Appilkation nichts mehr, die Menüleiste wird weiß, es steht keine Rückmeldung mehr und am Ende der Verarbeitung erst wird die Applikation 'neu gezeichnet'.

Es muss doch irgendwie möglich sein der Shell bei zubringen das sie sich nach einer gewissen Zeit immer mal wieder neu zeichnet oder?
 
Hi ich habe nun folgendes gemacht:
Um die problematische Methode createContents einen Thread gelegt.
Dieser Thread macht nichts anderes als die Methode nun aufzurufen
Doch leider habe ich immer noch genau das selbe Problem.
Aber wieso

public void createContents(Boolean filtern) {
texteThread thread = new texteThread(filtern);
Global.getMainShell().getDisplay().asyncExec(thread);
thread.run();
}

public class texteThread implements Runnable
{
private Boolean filter;

public texteThread(Boolean nfilter) {
filter = nfilter;
}

public void run()
{
TexteCtrl.getTexteTabelle().threadcreateContents(filter);
}
}
 
Ich habe es nun geschafft mit einem async Thread im Thread das Probleme zu beheben. Dieses funktioniert allerdings nur solange wie die Applikation den Kontex hat.
Wenn ich zwischen durch in eine andere Anwendung springe und zurück gehe in meine Applikation dann ist immer der ganze Bildschirm weiß :(

Gibt es dafür irgendeine Lösung?
 
Wenn du asyncExec benutzt brauchst du kein thread.run() aufrufen. Überhaupt ist der Aufruf von Thread.run nicht richtig. Um einen Thread zu erstellen musst du thread.start() aufrufen, sonst wird der Code nicht in einem neuen Thread ausgeführt und das Programm blockiert.
 
Hi
Habe das ganze umgebaut auf .start statt .run.

Wie gesagt es funktioniert wunderbar wenn man innerhalb der Anwendung bleibt.
Sobald man allerdings in eine andere Anwendung springt und wieder zurück ist der Bildschirm weiß und nichts sieht man mehr. :(
 
Wie gesagt du sollst den Thread gar nicht selber starten. AsyncExec braucht nicht mal einen Thread sondern nur ein Runnable. Einfach Thread.start mal ganz weglassen.
 
Hi habe es nun wie folgt gemacht:

public void createContents(Boolean filtern) {
javaThread thread = new javaThread(filtern);
Global.getMainShell().getDisplay().asyncExec(thread);
}

public class javaThread implements Runnable
{
private Boolean filter;

public javaThread(Boolean nfilter) {
filter = nfilter;
}

public void run()
{
JavaCtrl.getJavaTabelle().threadcreateContents(filter);
}
}

und in der Funktion threadcreateContents ist wieder ein asyncexec thread der nicht gestartet wird, sondern wie oben aufgeführt gestartet wird.

Dennoch habe ich immer noch das Problem wenn ich in eine andere Anwendung wechsle und wieder zurück das der Bildschirm weiß ist :(
 
Zurück