Is Swing Designer fully bidirectional?
I find Swing Designer great for building GUI components.
But I'm finding it very fragile when I need to manually tweak the code generated.
When I want to go back into Design mode after tweaking the code I often get an Exception and then an Error window saying:
No GUI roots detected.
Designer was unable to find any GUI elements in your source
In one example when this happended, the tweaking I did was quite minimal: I just added a few lines to the constructor of the frame that I had created with Designer to get the values of a jcombo box from a database. The program compiled and run perfectly. The problem was when I wanted to get back to the Design mode to add a component.
The exact error message I got was:
- Code: Select all
Stack trace:
java.lang.NullPointerException
at com.swtdesigner.model.swing.layouts.managers.group.layout.GroupLayoutHelper.convertAlignment(GroupLayoutHelper.java:27)
at com.swtdesigner.model.swing.layouts.managers.group.GroupLayoutInfo$GroupLayoutParserVisitor.endVisit(GroupLayoutInfo.java:1496)
at org.eclipse.jdt.core.dom.MethodInvocation.accept0(MethodInvocation.java:246)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2476)
at org.eclipse.jdt.core.dom.ASTNode.acceptChild(ASTNode.java:2523)
at org.eclipse.jdt.core.dom.MethodInvocation.accept0(MethodInvocation.java:239)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2476)
at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2546)
at org.eclipse.jdt.core.dom.MethodInvocation.accept0(MethodInvocation.java:244)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2476)
at com.swtdesigner.model.swing.layouts.managers.group.GroupLayoutInfo.treeBuildingComplete(GroupLayoutInfo.java:1181)
at com.swtdesigner.model.JavaInfo.treeBuildingComplete(JavaInfo.java:877)
at com.swtdesigner.model.swing.JavaBeanInfo.treeBuildingComplete(JavaBeanInfo.java:820)
at com.swtdesigner.model.swing.component.ContainerBeanInfo.treeBuildingComplete(ContainerBeanInfo.java:196)
at com.swtdesigner.model.JavaInfo.treeBuildingComplete(JavaInfo.java:877)
at com.swtdesigner.model.swing.JavaBeanInfo.treeBuildingComplete(JavaBeanInfo.java:820)
at com.swtdesigner.model.swing.component.ContainerBeanInfo.treeBuildingComplete(ContainerBeanInfo.java:196)
at com.swtdesigner.model.JavaInfo.doAcceptAsRoot(JavaInfo.java:846)
at com.swtdesigner.model.swing.component.ContainerBeanInfo.doAcceptAsRoot(ContainerBeanInfo.java:876)
at com.swtdesigner.model.parser.JavaInfoParser.getRootNodes(JavaInfoParser.java:606)
at com.swtdesigner.gef.DesignerEditor.parseCompilationUnit(DesignerEditor.java:1141)
at com.swtdesigner.gef.DesignerEditor$17.execute(DesignerEditor.java:1072)
at com.swtdesigner.model.swing.properties.custom.DesignTimeHelper.execute(DesignTimeHelper.java:54)
at com.swtdesigner.gef.DesignerEditor.handleActivate(DesignerEditor.java:1066)
at com.swtdesigner.gef.DesignerEditor.handleActivate(DesignerEditor.java:1059)
at com.swtdesigner.editors.MultiPageEditor.showDesignEditor(MultiPageEditor.java:426)
at com.swtdesigner.editors.MultiPageEditor$2.widgetSelected(MultiPageEditor.java:196)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:962)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:947)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:706)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3227)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2005)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:316)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
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:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
Full stack trace (to see full context):
java.lang.NullPointerException
at com.swtdesigner.model.swing.layouts.managers.group.layout.GroupLayoutHelper.convertAlignment(GroupLayoutHelper.java:27)
at com.swtdesigner.model.swing.layouts.managers.group.GroupLayoutInfo$GroupLayoutParserVisitor.endVisit(GroupLayoutInfo.java:1496)
at org.eclipse.jdt.core.dom.MethodInvocation.accept0(MethodInvocation.java:246)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2476)
at org.eclipse.jdt.core.dom.ASTNode.acceptChild(ASTNode.java:2523)
at org.eclipse.jdt.core.dom.MethodInvocation.accept0(MethodInvocation.java:239)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2476)
at org.eclipse.jdt.core.dom.ASTNode.acceptChildren(ASTNode.java:2546)
at org.eclipse.jdt.core.dom.MethodInvocation.accept0(MethodInvocation.java:244)
at org.eclipse.jdt.core.dom.ASTNode.accept(ASTNode.java:2476)
at com.swtdesigner.model.swing.layouts.managers.group.GroupLayoutInfo.treeBuildingComplete(GroupLayoutInfo.java:1181)
at com.swtdesigner.model.JavaInfo.treeBuildingComplete(JavaInfo.java:877)
at com.swtdesigner.model.swing.JavaBeanInfo.treeBuildingComplete(JavaBeanInfo.java:820)
at com.swtdesigner.model.swing.component.ContainerBeanInfo.treeBuildingComplete(ContainerBeanInfo.java:196)
at com.swtdesigner.model.JavaInfo.treeBuildingComplete(JavaInfo.java:877)
at com.swtdesigner.model.swing.JavaBeanInfo.treeBuildingComplete(JavaBeanInfo.java:820)
at com.swtdesigner.model.swing.component.ContainerBeanInfo.treeBuildingComplete(ContainerBeanInfo.java:196)
at com.swtdesigner.model.JavaInfo.doAcceptAsRoot(JavaInfo.java:846)
at com.swtdesigner.model.swing.component.ContainerBeanInfo.doAcceptAsRoot(ContainerBeanInfo.java:876)
at com.swtdesigner.model.parser.JavaInfoParser.getRootNodes(JavaInfoParser.java:606)
at com.swtdesigner.gef.DesignerEditor.parseCompilationUnit(DesignerEditor.java:1141)
at com.swtdesigner.gef.DesignerEditor$17.execute(DesignerEditor.java:1072)
at com.swtdesigner.model.swing.properties.custom.DesignTimeHelper.execute(DesignTimeHelper.java:54)
at com.swtdesigner.gef.DesignerEditor.handleActivate(DesignerEditor.java:1066)
at com.swtdesigner.gef.DesignerEditor.handleActivate(DesignerEditor.java:1059)
at com.swtdesigner.editors.MultiPageEditor.showDesignEditor(MultiPageEditor.java:426)
at com.swtdesigner.editors.MultiPageEditor$2.widgetSelected(MultiPageEditor.java:196)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:227)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:962)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:947)
at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:706)
at org.eclipse.swt.custom.CTabFolder.setSelection(CTabFolder.java:3227)
at org.eclipse.swt.custom.CTabFolder.onMouse(CTabFolder.java:2005)
at org.eclipse.swt.custom.CTabFolder$1.handleEvent(CTabFolder.java:316)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:66)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:938)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3682)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3293)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:169)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
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:508)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:447)
at org.eclipse.equinox.launcher.Main.run(Main.java:1173)
Is this a known shortcoming of Swing Designer or am I maybe doing something wrong?
Thanks very much.