SWTException beim Schließen einer ViewPart

wm

Mitglied
In meiner View (ViewPart) habe ich eine asynchron laufende Methode (10mal per sekunde, alle 100 ms). Beim Schließen des Haupfensters (Eclipse) kann ich die SWTException verhindern mit
!Display.getCurrent().isDisposed() bzw.
!PlatformUI.getWorkbench().isClosing()
Wenn ich aber die ViewPart selbst schließe (mausklick auf [x] des Reiters der View), bekomme ich immer eine SWTException.
Wie kann ich der 'timerToRefreshButtonEnabled' mitteilen, dass die ViewPart geschlossen wurde?
Java:
    //start it
    Display.getDefault().asyncExec(this.timerToRefreshButtonEnabled);
....

    private final Runnable timerToRefreshButtonEnabled = new Runnable() {

        public void run() {

            if (!Display.getCurrent().isDisposed() && !PlatformUI.getWorkbench().isClosing()
                    && (MyViewPartClass.this != null)

            ) {
                if (Eclipse.getSelectedText().trim().equals("")) {
...
                }
                else {
...
                }
                //Wiederhole alle 100 millis
                Display.getCurrent().timerExec(100, this);
            }

        }
    };
 

Sonecc

Gesperrter Benutzer
Vielleicht wäre es hilfreich für deine Helfer die Exception genauer zu beschreiben. Eine SWTException kann mehrere Formen haben ("Widget disposed to early u.w.). außerdem wäre eine Stacktrace nie verkehrt....

Zu deinem Problem kann ich aus dem Stehgreif heraus grade nichts weiteres sagen. Wenn mir was einfällt auf dem Weg nach Hause, werd ichs aber posten.
 

wm

Mitglied
@SirWayne wie funktioniert der Job / wie geht der?

@Sonecc


!ENTRY org.eclipse.ui 4 0 2011-05-09 17:23:05.242
!MESSAGE Unhandled event loop exception
!STACK 0
org.eclipse.swt.SWTException: Widget is disposed
at org.eclipse.swt.SWT.error(SWT.java:4083)
at org.eclipse.swt.SWT.error(SWT.java:3998)
at org.eclipse.swt.SWT.error(SWT.java:3969)
at org.eclipse.swt.widgets.Widget.error(Widget.java:468)
at org.eclipse.swt.widgets.Widget.checkWidget(Widget.java:340)
at org.eclipse.swt.widgets.Table.getSelection(Table.java:2700)
at plugin.views.Results$1.run(MyViewPart.java:110)
at org.eclipse.swt.widgets.Display.runTimer(Display.java:4167)
at org.eclipse.swt.widgets.Display.messageProc(Display.java:3256)
at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2459)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3655)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2640)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2604)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2438)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:671)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:664)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
 

wm

Mitglied
Wüsste gerne, wie ich das machen soll. Hab schon einiges herumprobiert, kann das widget nicht erfassen, ja, da wäre mir ja schon geholfen.
 
G

Gast2

Gast
kannst das widget nicht erfassen? he?
ruf halt davor widget.isDisposed auf außerdem solltest du den job halt beenden wenn die viewpart geschlossen wird also einfach disposed von deiner viewpart überschreiben
 

wm

Mitglied
ich weiß nicht wie ihr das macht, aber mit
Java:
MyViewPart.this.getViewSite().getShell().isDisposed();
erhalte ich das Window von Eclipse und nicht die View. Wenn ich den Reiter über [x] schließe, ist
MyViewPart.this.getViewSite().getShell().isDisposed();
immer noch false
 
Zuletzt bearbeitet:
G

Gast2

Gast
ich weiß nicht wie ihr das macht, aber mit
Java:
MyViewPart.this.getViewSite().getShell().isDisposed();
erhalte ich das Window von Eclipse und nicht die View. Wenn ich den Reiter über [x] schließe, ist
MyViewPart.this.getViewSite().getShell().isDisposed();
immer noch false

He?
Hast du mein Beitrag gelesen? Du greifst auf ein widget zu wahrscheinlich
Java:
Eclipse.getSelectedText()
Aber keine Ahnung was das sein soll... Auf jeden Fall kannst du auf dem Widget isDisposed oder ähnliches aufrufen.

Außerdem sollst du von der Viewpart die dispose MEthode überschreiben und den Job wieder aufräumen.
 

wm

Mitglied
Ne, Eclipse.getSelectedText() holt sich den selektierten Text aus dem aktiven Editor, wenn ich meine View schließe über [x], ist der Editor ja noch on.
 
G

Gast2

Gast
Ne, Eclipse.getSelectedText() holt sich den selektierten Text aus dem aktiven Editor, wenn ich meine View schließe über [x], ist der Editor ja noch on.

1. Hast du einen Job gemacht?
2. hast du die dispose Methode überschrieben?
3. Im Stacktrace steht irgendwo auf welches widget zu zugreifst wo es nicht mehr gibt.
 

Sonecc

Gesperrter Benutzer
plugin.views.Results$1.run(MyViewPart.java:110) <- Das Widget an dieser Stelle ist disposed. Frage an diesem Widget den Status über isDisposed ab und beende den Thread falls es disposed ist.
 

wm

Mitglied
jetzt wird keine Exception mehr geworfen
Java:
...
!parent.isDisposed()
...
public void createPartControl(Composite parent) {
...
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eclipse Probleme beim Ausführen eines Programms Plattformprogrammierung 3
G Nullpointer im Debugger, jedoch nicht beim normalen Starten Plattformprogrammierung 12
W Eclipse vergißt beim Exportieren Resources-Ordner Plattformprogrammierung 11
C Eclipse: Notification beim umbennen von Methoden? Plattformprogrammierung 4
M OSGi Probleme / Unklarheiten beim laden von DLL's Plattformprogrammierung 4
dzim OSGi Problem beim Verwenden von Declaratice Services Plattformprogrammierung 18
L RCP Exception beim Ausführen von BIRT Application Plattformprogrammierung 2
Mike90 Error beim Öffnen einer RCP-App Plattformprogrammierung 2
M EMF Model Transaction Fehler beim Updaten eines Graphiti-Pictogramms Plattformprogrammierung 2
L RCP Detached View beim Starten des RCPs? Plattformprogrammierung 3
lumo RCP Beim wechsel der Perspektive automatisch Views aktivieren Plattformprogrammierung 6
X b3 aggregator - Erfahrungen beim spiegeln von p2 Update Sites Plattformprogrammierung 10
jemandzehage Kurze Fehlernachricht beim starten in Eclipse Plattformprogrammierung 5
dzim Veränderte Abhängigkeiten beim Umstieg von 3.5.2 auf 3.6.1 Plattformprogrammierung 9
J RCP, Fehler beim MultiPageEditor, Widget is disposed Plattformprogrammierung 4
G Probleme beim Export Plattformprogrammierung 2
dzim Problem beim neuanlegen von Composites Plattformprogrammierung 4
S Plugin: View beim Button-Klick austauschen Plattformprogrammierung 7
K Keine EXE beim Export Plattformprogrammierung 10
M Teilweise Probleme beim Updaten von Plugins Plattformprogrammierung 3
S Versionsprobleme beim Erstellen eines Plugins Plattformprogrammierung 6
S View speichern/laden beim schließen Plattformprogrammierung 14
B Simple Action beim Speichern in Eclipse... Plattformprogrammierung 2
M Problem beim Zugriff auf Klasse aus Fragment in einem anderen Plugin Plattformprogrammierung 3
N Beim starten addPartListener() benutzen Plattformprogrammierung 2
dzim Nerviges Gepiepe beim Nutzen von KeyListenern & Scrollbare Composites Plattformprogrammierung 2
dzim java.lang.ClassNotFoundException beim laden eines Plugins Plattformprogrammierung 10
T [RCP] Was passiert genau beim laden eines Plugins? Plattformprogrammierung 4
dzim Fehler beim starten eines Produkts Plattformprogrammierung 5
V Eclipse RCP Encoding beim Export Plattformprogrammierung 4
V Ich brauche hilfe beim Eclipse RCP Export Plattformprogrammierung 8
M RCP [Eclipse RCP 3.4] ViewTab Kontextmenu "Alle schließen" Plattformprogrammierung 0
S Steuerung View (Schließen erkennen/Hide anstatt Close) Plattformprogrammierung 2
L View schließen Plattformprogrammierung 7
G Schließen abfangen? Plattformprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben