GUI friert ein

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo,

ich hab ein Plugin geschrieben, das Dateien einlist und nach einem bestimmten Muster parsen soll. Das Ergebnis des Parsens wird dann in der GUI angezeigt. Technisch klappt auch alles soweit. Allerdings habe ich das Problem, das meine GUI kurzzeitig einfriert.

Nachdem ich mit einem "fileDialog" die gewünscht Datei bestimmt habe, öffne ich diese und parse sie. Dabei erstelle ich mir eine Liste mit Objekten, die nachdem Vorgang in der GUI angezeigt werden sollen. Genau an dieser stelle friert meine GUI kurz ein. Nachdem schließen des Filedialog, bleiben seine umrisse ca 1/2 sek als weißes fenster sichtbar. Kann mir vielleicht jemand helfen wie ich das Problem umgehen kann?

Hier mal die entscheidende Stelle:

Code:
        FileDialog dialog = new FileDialog(getSite().getShell(), SWT.OPEN);
        dialog.setText(Messages.getString("fileChooser.headline"));
        dialog.setFilterExtensions(new String[] { "*.java" });
        dialog.setFilterPath(File.separator);

        // read the filename
        final String filePath = dialog.open();

        // check if selected file is an existing javafile
        if (filePath != null && filePath.trim().length() != 0 && filePath.endsWith(".java") && (new File(filePath)).exists()) {

            // Open file an parse the file
            if (parseFile(filePath)) {

                List correct structs;

                // at least one correct method
                if ((correctStructs = fetchStructs()) != null) {

                    // show the results
                    model.set(correctStructs);
                }
            }
        }

Vielen dank für eure Hilfe!
 
G

Gast

Gast
Ups Zeile 16 steht natürlich:

Code:
List correctStructs;
 
G

Gast

Gast
Hab selber noch was rumprobiert und zumindest ne Lösung gefunden. 100 % gefällt sie mir jedoch nicht. Nachdem schließen des Dialog, expliziet die update Methode rufen:

Code:
Display.getCurrent().update();
 

Ark

Top Contributor
Ich glaube, was Du brauchst, ist eine Methode, die da heißt javax.swing.SwingUtilities.invokeLater(Runnable doRun).

MfG
Ark
 

AlArenal

Top Contributor
Ark hat gesagt.:
Ich glaube, was Du brauchst, ist eine Methode, die da heißt javax.swing.SwingUtilities.invokeLater(Runnable doRun).

MfG
Ark

Ich glaube das bietet sich bei SWT nicht an. Aber ein eigener Thread wäre schon schön :)
 

Ceos

Mitglied
ich meine es gibt in SWT einen Methode executeUpdate(Runnable); mit der die Run-Methode einer Runnable als Thread gestartet wird und dann ein refresh der GUI bewirkt btw. gab es davon noch eine variante wo die GUI ohne zu freezen aber im zustand disabled wartet bis die runnable endet
 
G

Gast

Gast
Guter Tipp. hab jetzt mal einen Thread drum gebaut.

Code:
            IRunnableWithProgress runnable = new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor) {
                    parseStructs(filePath);
                    monitor.done();
                }
            };
            IRunnableContext context = new ProgressMonitorDialog(getSite().getShell());
            try {
                context.run(true , false, runnable);
                
            } catch (InvocationTargetException e1) {
            } catch (InterruptedException e1) {
            }
 

Ceos

Mitglied
okay das war zwar nicht ganz das was ich meinte, aber wenn es dir so besser gefällt ^^ gern geschehen
 
G

Gast

Gast
Wobei der mir eigentlich nichts bringt, da ich warten muss, bis die datei geparst ist, ehe ich die ergebnisse anzeigen kann. Aber mit dem Fenster sieht es zumindest etwas lebendiger aus :)
 
G

Gast

Gast
werd deinem hinweis nochmal genauer nachgehen und dann berichten !!
 

Ceos

Mitglied
mach dir doch n dialog auf mit nem ladebalken oder irgend ner animation in die mitte während du wartest ^^
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben