2013-02-03 17 views
1

當我關閉主窗口時,出現錯誤,因爲它被丟棄。我試圖「過濾」(使用條件),但我無法讓它工作。Java如何防止小部件處置錯誤?

if(!Display.getDefault().isDisposed()){ 
    Display.getDefault().syncExec(new Runnable() { 

     @Override 
     public void run() { 
     View.tableViewer.refresh(); 
     setViewInfo(); 
     } 
    }); 
} 

錯誤:

Exception in thread "Thread-3" org.eclipse.swt.SWTException: Failed to execute runnable (org.eclipse.swt.SWTException: Widget is disposed) at org.eclipse.swt.SWT.error(SWT.java:4361) at org.eclipse.swt.SWT.error(SWT.java:4276) at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:196) at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150) at org.eclipse.swt.widgets.Display.syncExec(Display.java:4687) at com.chriss.udp.Message.WRITE(Message.java:166) at com.chriss.udp.threads.ThreadConnect.run(ThreadConnect.java:55) at java.lang.Thread.run(Unknown Source) Caused by: org.eclipse.swt.SWTException: Widget is disposed

+0

看起來像'TableViewer'(不是'Display')被放置,因爲Exception在'run'方法中被拋出。 – Baz

回答

2

你可以問Widget是否配置。

boolean isDisposed() 

Returns true if the widget has been disposed, and false otherwise.

你沒有檢查顯示,因爲只要在應用程序運行它不設置。 您必須在可運行內部檢查table或this.isDisposed()。

請發佈完整的堆棧跟蹤。我把問題放在可運行的內部。

+0

這就是我正在做的,看看我的代碼。我正在檢查Display Shell是否處置,但它不起作用,我仍然收到錯誤。 –

+1

@ZbarceaChristian當你關閉窗口時,外殼(_not_顯示)被丟棄,它所包含的所有東西,包括表格在內都被丟棄。根據你的其他代碼,這也可以運行_before_ shell。所以明智的做法是檢查桌子是否被丟棄。 –