Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[platform-swt-dev] Perplexing Behavior With Custom Sash Widget--Eclipse Gurus Needed

Title: SOTA Stationery
Dear Eclipse Gurus:
 
I am aware of the myriad warnings about subclassing SWT widgets, but I'm trying to learn about those limitations in greater depth.
 
My objective is to make the SashForm resize its subcomponents dynamically as the divider is dragged.  I have succeeded in doing this by creating essentially a complete copy of the SashForm (DynamicSashForm) and commenting out one line of the DynamicSashForm onDragSash event.  This works fine, but there is one aesthetic problem.  The Sash draws a "rough" pattern over the divider as it is being dragged.  To defeat this, I'm attempting to override the drawBand method (I believe this is where the "rough" pattern is being drawn).
 
BUT when I create my copy of the Sash (DynamicSash), I run into perplexing problems.  Understand that since many of the functions in Sash and Control are declared as "package", for DynamicSash I have no choice but to declare my DynamicSash as org.eclipse.swt.widgets.DynamicSash.   DynamicSash is a complete copy of Sash and is a descendant of Control.
 
To implement DynamicSash, I replace all Sash references in DynamicSashForm with DynamicSash.
 
The observable results are bizzare.  When I instantiate my DynamicSashForm, I get the following stack trace (see below) which is the first of many issues.   I don't know exactly what is going on, but my guess is that Eclipse must be doing something unusual in the class loading functionsIf anyone can explain why I'm getting the IllegalAccessError, it will likely shed light on numerious other strange, strange behaviors that I get when I try other angles of attack to circumvent this problems.
 
Similarly strange behaviors result if I simply try to subclass the Sash.   It's hard to explain, but it seems as if the system loads my DynamicSash class, while other parts of the system treat the class as if it were the original SWT Sash.  For example, using the debugger to single-step step through the drag event handler seems to ignore my descendant methods, even though my DynamicSash is provably being instantiated (as evidenced by both a constructor diagnostic and by the debugger itself, that confirms my object is of type DynamicSash).
 
I've checked the method signatures until I am blue in the face.  The system is ignoring my descendant methods, except for the constructor.
 
Does anyone understand how this could be happening?
 
TIA,
Dave
 
java.lang.IllegalAccessError: tried to access method org.eclipse.swt.widgets.Widget.checkBits(IIIIIII)I from class org.eclipse.swt.widgets.DynamicSash
 at org.eclipse.swt.widgets.DynamicSash.checkStyle(DynamicSash.java:114)
 at org.eclipse.swt.widgets.DynamicSash.<init>(DynamicSash.java:72)
 at com.corticon.eclipse.common.ui.DynamicSashForm.layout(DynamicSashForm.java:218)
 at com.corticon.eclipse.common.ui.DynamicSashForm$1.handleEvent(DynamicSashForm.java:84)
 at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801)
 at org.eclipse.swt.widgets.Control.WM_SIZE(Control.java:4171)
 at org.eclipse.swt.widgets.Scrollable.WM_SIZE(Scrollable.java:312)
 at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:875)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3037)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
 at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1462)
 at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3050)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.SetWindowPos(Native Method)
 at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1044)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1882)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1861)
 at org.eclipse.swt.layout.FillLayout.layout(FillLayout.java:148)
 at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:884)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3037)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
 at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1462)
 at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3050)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.EndDeferWindowPos(Native Method)
 at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:432)
 at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:398)
 at org.eclipse.swt.widgets.Composite.setResizeChildren(Composite.java:499)
 at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:887)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3037)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
 at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1462)
 at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3050)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.SetWindowPos(Native Method)
 at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1044)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1882)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1861)
 at org.eclipse.swt.layout.FillLayout.layout(FillLayout.java:148)
 at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:884)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3037)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
 at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1462)
 at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3050)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.SetWindowPos(Native Method)
 at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1044)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1882)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1861)
 at org.eclipse.swt.layout.FillLayout.layout(FillLayout.java:148)
 at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:884)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3037)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
 at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java:1462)
 at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:77)
 at org.eclipse.swt.widgets.Control.windowProc(Control.java:3050)
 at org.eclipse.swt.widgets.Display.windowProc(Display.java:3338)
 at org.eclipse.swt.internal.win32.OS.SetWindowPos(Native Method)
 at org.eclipse.swt.widgets.Widget.SetWindowPos(Widget.java:1044)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1882)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1861)
 at org.eclipse.swt.widgets.Control.setBounds(Control.java:1926)
 at org.eclipse.ui.internal.LayoutPart.setBounds(LayoutPart.java:290)
 at org.eclipse.ui.internal.presentations.PresentablePart.setBounds(PresentablePart.java:115)
 at org.eclipse.ui.internal.presentations.DefaultPartPresentation.layout(DefaultPartPresentation.java:723)
 at org.eclipse.ui.internal.presentations.DefaultPartPresentation.setControlSize(DefaultPartPresentation.java:733)
 at org.eclipse.ui.internal.presentations.DefaultPartPresentation.selectPart(DefaultPartPresentation.java:1123)
 at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:946)
 at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:921)
 at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1020)
 at org.eclipse.ui.internal.PartStack.add(PartStack.java:290)
 at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:110)
 at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:59)
 at org.eclipse.ui.internal.EditorAreaHelper.openEditor(EditorAreaHelper.java:266)
 at org.eclipse.ui.internal.EditorManager$4.run(EditorManager.java:697)
 at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
 at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:686)
 at org.eclipse.ui.internal.EditorManager.openInternalEditor(EditorManager.java:782)
 at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:585)
 at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:573)
 at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2201)
 at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2134)
 at org.eclipse.ui.internal.WorkbenchPage.access$6(WorkbenchPage.java:2126)
 at org.eclipse.ui.internal.WorkbenchPage$9.run(WorkbenchPage.java:2113)
 at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
 at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2108)
 at org.eclipse.ui.ide.IDE.openEditor(IDE.java:299)
 at org.eclipse.ui.actions.OpenFileAction.openFile(OpenFileAction.java:96)
 at org.eclipse.ui.actions.OpenSystemEditorAction.run(OpenSystemEditorAction.java:94)
 at org.eclipse.ui.views.navigator.OpenActionGroup.runDefaultAction(OpenActionGroup.java:111)
 at org.eclipse.ui.views.navigator.MainActionGroup.runDefaultAction(MainActionGroup.java:293)
 at org.eclipse.ui.views.navigator.ResourceNavigator.handleOpen(ResourceNavigator.java:624)
 at org.eclipse.ui.views.navigator.ResourceNavigator$6.open(ResourceNavigator.java:388)
 at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:429)
 at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:615)
 at org.eclipse.core.runtime.Platform.run(Platform.java:747)
 at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:427)
 at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:635)
 at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:731)
 at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:211)
 at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:206)
 at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:238)
 at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
 at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
 at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2772)
 at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2431)
 at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377)
 at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
 at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:254)
 at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
 at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
 at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
 at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:324)
 at org.eclipse.core.launcher.Main.basicRun(Main.java:183)
 at org.eclipse.core.launcher.Main.run(Main.java:644)
 at org.eclipse.core.launcher.Main.main(Main.java:628)

David Lynch
General Manager
SOTA Enterprises, Inc.
690 South La Luna Avenue
Ojai, California 93023
Voice 805-640-1212 Fax 805-640-1907 Pager 626-932-2140
mailto:davidlynch@xxxxxxxx

 
 

Back to the top