1.1 Exception: io.github.andrewauclair.moderndocking.exception.DockingLayoutException
Hello @andrewauclair,
I just updated to 1.1, and am seeing this exception. The exception is thrown on app statup.
Apr 28, 2025 6:53:55 PM io.github.andrewauclair.moderndocking.api.AppStateAPI$1 actionPerformed
WARNING: null
io.github.andrewauclair.moderndocking.exception.DockingLayoutException
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToFile(LayoutPersistenceAPI.java:106)
at io.github.andrewauclair.moderndocking.api.AppStateAPI$1.actionPerformed(AppStateAPI.java:178)
at java.desktop/javax.swing.Timer.fireActionPerformed(Timer.java:311)
at java.desktop/javax.swing.Timer$DoPostEvent.run(Timer.java:243)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "content" is null
at java.xml/com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeXMLContent(XMLStreamWriterImpl.java:1487)
at java.xml/com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeAttribute(XMLStreamWriterImpl.java:554)
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.writeTabbedNodeToFile(LayoutPersistenceAPI.java:410)
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.writeNodeToFile(LayoutPersistenceAPI.java:333)
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToFile(LayoutPersistenceAPI.java:319)
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToOutputStream(LayoutPersistenceAPI.java:124)
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToFile(LayoutPersistenceAPI.java:104)
... 16 more
And when attempting to pin to the side, I see the same exception and the dockable disappears.
The docking overlay is rendering odd too:
After restarting the app so it generated a layout xml. I also get this error on startup now:
io.github.andrewauclair.moderndocking.exception.DockingLayoutException: null
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.loadApplicationLayoutFromFile(LayoutPersistenceAPI.java:162) ~[modern-docking-api-1.1.jar:?]
at io.github.andrewauclair.moderndocking.api.AppStateAPI.restore(AppStateAPI.java:223) ~[modern-docking-api-1.1.jar:?]
at io.github.andrewauclair.moderndocking.app.AppState.restore(AppState.java:113) ~[modern-docking-single-app-1.1.jar:?]
at io.tlf.ow.fob.manager.ui.MainWindow.lambda$init$0(MainWindow.java:66) ~[main/:?]
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) [?:?]
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) [?:?]
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) [?:?]
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) [?:?]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) ~[?:?]
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) ~[?:?]
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) ~[?:?]
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) ~[?:?]
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) ~[?:?]
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117) ~[?:?]
at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191) ~[?:?]
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:236) ~[?:?]
at java.desktop/java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:234) ~[?:?]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:319) [?:?]
at java.desktop/java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:234) ~[?:?]
at java.desktop/java.awt.Dialog.show(Dialog.java:1079) ~[?:?]
at java.desktop/java.awt.Component.show(Component.java:1728) ~[?:?]
at java.desktop/java.awt.Component.setVisible(Component.java:1675) ~[?:?]
at java.desktop/java.awt.Window.setVisible(Window.java:1036) ~[?:?]
at java.desktop/java.awt.Dialog.setVisible(Dialog.java:1015) ~[?:?]
at org.jdesktop.swingx.JXTipOfTheDay.showDialog(JXTipOfTheDay.java:400) ~[swingx-all-1.6.5-1.jar:1.6.5-1]
at org.jdesktop.swingx.JXTipOfTheDay.showDialog(JXTipOfTheDay.java:367) ~[swingx-all-1.6.5-1.jar:1.6.5-1]
at io.tlf.ow.fob.manager.FobManager.lambda$initWindow$0(FobManager.java:211) ~[main/:?]
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) ~[?:?]
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) ~[?:?]
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) ~[?:?]
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) ~[?:?]
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) [?:?]
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) [?:?]
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) [?:?]
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) [?:?]
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) [?:?]
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) [?:?]
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) [?:?]
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) [?:?]
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) [?:?]
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[22,85]
Message: XML document structures must start and end within the same entity.
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:652) ~[?:?]
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1353) ~[?:?]
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.readTabNodeFromFile(LayoutPersistenceAPI.java:678) ~[modern-docking-api-1.1.jar:?]
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.readNodeFromFile(LayoutPersistenceAPI.java:554) ~[modern-docking-api-1.1.jar:?]
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.readLayoutFromReader(LayoutPersistenceAPI.java:512) ~[modern-docking-api-1.1.jar:?]
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.loadApplicationLayoutFromInputStream(LayoutPersistenceAPI.java:182) ~[modern-docking-api-1.1.jar:?]
at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.loadApplicationLayoutFromFile(LayoutPersistenceAPI.java:160) ~[modern-docking-api-1.1.jar:?]
... 39 more
EDIT: This is the contents of the generated XML (Yes, it is cut off like that in the file)
<?xml version="1.0" ?>
<app-layout>
<layout main-frame="true" location="439,183" size="828,653" state="0">
<westToolbar>
</westToolbar>
<eastToolbar>
</eastToolbar>
<southToolbar>
</southToolbar>
<tabbed>
<selectedTab class-name="io.tlf.ow.fob.manager.ui.panes.RgaPane" persistentID="rga" anchor="">
</selectedTab>
<tab persistentID="rga" class-name="io.tlf.ow.fob.manager.ui.panes.RgaPane" anchor="
Looks like one of the anchor strings is likely null when loading an old layout. Auto hide appears to not work at all because I have the code commented out... I'll get these sorted out today in a 1.1.1 release.
Thanks, in this case there is no old layout. I can delete the layout xml to get the error.
I think I just reproduced your first stacktrace on 1.1.1 and it's due to some null anchor values in InternalRootDockingPanel dock.
io.github.andrewauclair.moderndocking.exception.DockingLayoutException at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToFile(LayoutPersistenceAPI.java:106) at io.github.andrewauclair.moderndocking.api.AppStateAPI$1.actionPerformed(AppStateAPI.java:178) at java.desktop/javax.swing.Timer.fireActionPerformed(Timer.java:311) at java.desktop/javax.swing.Timer$DoPostEvent.run(Timer.java:243) at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318) at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:773) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720) at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714) at java.base/java.security.AccessController.doPrivileged(AccessController.java:400) at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742) at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203) at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124) at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109) at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90) Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "content" is null at java.xml/com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeXMLContent(XMLStreamWriterImpl.java:1487) at java.xml/com.sun.xml.internal.stream.writers.XMLStreamWriterImpl.writeAttribute(XMLStreamWriterImpl.java:554) at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.writeTabbedNodeToFile(LayoutPersistenceAPI.java:410) at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.writeNodeToFile(LayoutPersistenceAPI.java:333) at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.writeSplitNodeToFile(LayoutPersistenceAPI.java:386) at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.writeNodeToFile(LayoutPersistenceAPI.java:330) at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToFile(LayoutPersistenceAPI.java:319) at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToOutputStream(LayoutPersistenceAPI.java:124) at io.github.andrewauclair.moderndocking.api.LayoutPersistenceAPI.saveLayoutToFile(LayoutPersistenceAPI.java:104) ... 16 more