[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[platform-ui-dev] Problem with ActionContributionItem.getImageCache() calls
|
Hi together,
I have written a littel JFace application extending the ApplicationWindow
class, having some menu bar added by calling addMenuBar() and I got the
following SWTException during the configureShell() method is called:
Exception in thread "HandlerThread#Journal" org.eclipse.swt.SWTException:
Invalid thread access
at org.eclipse.swt.SWT.error(SWT.java:2827)
at org.eclipse.swt.SWT.error(SWT.java:2752)
at org.eclipse.swt.SWT.error(SWT.java:2723)
at org.eclipse.swt.widgets.Display.error(Display.java:748)
at org.eclipse.swt.widgets.Display.checkDevice(Display.java:573)
at org.eclipse.swt.widgets.Display.disposeExec(Display.java:688)
at
org.eclipse.jface.action.ActionContributionItem.getImageCache(ActionContribu
tionItem.java:389) <-- *
at
org.eclipse.jface.action.ActionContributionItem.updateImages(ActionContribut
ionItem.java:887)
at
org.eclipse.jface.action.ActionContributionItem.update(ActionContributionIte
m.java:824)
at
org.eclipse.jface.action.ActionContributionItem.fill(ActionContributionItem.
java:274)
at org.eclipse.jface.action.MenuManager.update(MenuManager.java:625)
at org.eclipse.jface.action.MenuManager.update(MenuManager.java:547)
at org.eclipse.jface.action.MenuManager.fill(MenuManager.java:232)
at org.eclipse.jface.action.MenuManager.update(MenuManager.java:625)
at org.eclipse.jface.action.MenuManager.update(MenuManager.java:547)
at org.eclipse.jface.action.MenuManager.createMenuBar(MenuManager.java:158)
at
org.eclipse.jface.window.ApplicationWindow.createTrimWidgets(ApplicationWind
ow.java:332)
at
org.eclipse.jface.window.ApplicationWindow.configureShell(ApplicationWindow.
java:320)
at
de.powerisdnmonitor.ui.jface.application.JournalApplication.configureShell(J
ournalApplication.java:43)
:
:
My configureShell() method is simple an overriden method from
ApplicationWindow:
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText("MyApplication");
}
* The exception only occurs if I call the Application from user-interface
thread which does not belong to Display.getDefault(). The method
getImageCache() of the class ActionContributionItem calls
Display.getDefault() for my Thread "HandlerThread#Journal" although it does
not belong to this Display object:
private static ImageCache getImageCache() {
ImageCache cache = globalImageCache;
if (cache == null) {
globalImageCache = cache = new ImageCache();
Display display = Display.getDefault(); <-- *
if (display != null) {
display.disposeExec(new Runnable() {
public void run() {
if (globalImageCache != null) {
globalImageCache.dispose();
globalImageCache = null;
}
}
});
}
}
return cache;
}
Wouldn't it be better to call Display.getCurrent() in the getImageCache()
method? Or should I do something different in my coding?
Best regards,
Thilo