[ https://issues.apache.org/jira/browse/NETBEANS-633?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16459633#comment-16459633 ]
will mason commented on NETBEANS-633: ------------------------------------- Hi. I have attached a minimal example demonstrating this problem. In the *{{GuiClient}}* project has the screens. * *{{BigPanel}}* is a container for the *{{MainPanel}}* and another field. * *{{MainPanel}}* includes a properties string from the {{GuiCommon}} project resources area ** *{{bundles/commonStrings.properties}}* * GuiClient depends-on GuiCommon in the gradle build. * Netbeans finds the correct properties file and programs with the same structure run quite nicely ** I haven't run the example. I just wanted to reproduce the designer error. If the problem can't be fixed directly; a suitable workaround would be to permit loading and design of the {{BigPanel}} container without barfing on the {{bundles/commonStrings.properties}}. For other resources there's a call to check if we are at design-time so missing resources don't crash. Something like that would let changes be made _at least_. *Project tree* ... {noformat} swing_bundles/ | +-- GuiClient/ | | | +-- src/ | | | +-- main/ | | | | : +-- java/ | ... MainPanel.java | ... BigPanel.java | +-- GuiCommon/ | +-- src/ | +-- main/ | | | +-- java/ | | | +-- resources/ | | | + bundles/ | | | +-- commonStrings.properties +-- test/ {noformat} This is the stacktrace from a Netbeans 8.2 session on Linux. I included this for comparison with the Netbeans 9.0-beta stacktrace posted originally. The problem is in both versions. It probably only makes sense to fix it for Netbeans 9. -- *stacktrace* -- {noformat} java.util.MissingResourceException: Can't find bundle for base name bundles/commonStrings, locale en_AU at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1573) at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1396) at java.util.ResourceBundle.getBundle(ResourceBundle.java:782) at ex.gui.bundles.MainPanel.initComponents(MainPanel.java:33) at ex.gui.bundles.MainPanel.<init>(MainPanel.java:18) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at java.lang.Class.newInstance(Class.java:442) at org.netbeans.modules.form.CreationFactory.createDefaultInstance(CreationFactory.java:180) at org.netbeans.modules.form.RADComponent.createBeanInstance(RADComponent.java:252) at org.netbeans.modules.form.RADComponent.initInstance(RADComponent.java:191) at org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:780) at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:968) at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:503) at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:283) at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:352) at org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:293) at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:138) at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:98) at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:94) at org.openide.util.Mutex.readAccess(Mutex.java:250) at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:276) at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:349) at org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:461) at org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:279) at org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:87) at org.netbeans.modules.nbform.FormDesignerTC$PreLoadTask$1.run(FormDesignerTC.java:268) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) java.io.IOException: Undefined component referenced in layout: mainPanel1 at org.netbeans.modules.form.layoutdesign.LayoutPersistenceManager.correctMissingName(LayoutPersistenceManager.java:737) at org.netbeans.modules.form.layoutdesign.LayoutPersistenceManager.loadLayout(LayoutPersistenceManager.java:413) at org.netbeans.modules.form.layoutdesign.LayoutPersistenceManager.loadContainer(LayoutPersistenceManager.java:379) at org.netbeans.modules.form.layoutdesign.LayoutModel.loadContainerLayout(LayoutModel.java:1231) at org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:998) at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:503) at org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:283) at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:352) at org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:293) at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:138) at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:98) at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:94) at org.openide.util.Mutex.readAccess(Mutex.java:250) at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:276) at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:349) at org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:461) at org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:279) at org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:87) at org.netbeans.modules.nbform.FormDesignerTC$PreLoadTask$1.run(FormDesignerTC.java:268) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) {noformat} > GUI Builder fails to load sub-panel with NLS / Respource bundle > --------------------------------------------------------------- > > Key: NETBEANS-633 > URL: https://issues.apache.org/jira/browse/NETBEANS-633 > Project: NetBeans > Issue Type: Bug > Components: guibuilder - Binding, guibuilder - Natural Layout > Affects Versions: 8.2, 9.0 > Environment: Product Version: Apache NetBeans IDE Dev (Build > incubator-netbeans-release-205-on-20180202) > Java: 10; Java HotSpot(TM) 64-Bit Server VM 10+46 > Runtime: Java(TM) SE Runtime Environment 10+46 > System: Windows 10 version 10.0 running on amd64; Cp1252; en_AU (nb) > User directory: Z:\tmp\.other\user\netbeans\v09.00-beta\FourAbs > Cache directory: Z:\tmp\.other\cache\netbeans\FourAbs-09 > Reporter: will mason > Priority: Critical > Labels: GUI, MissingResourceException, Swing, > internationalization > Attachments: image-2018-04-10-10-32-31-818.png, swing_bundles.7z > > > h2. expected > * To be able to view and edit parent JPanel screen in Netbeans GUI Builder. > * This should be possible no matter what the sub-panels do > * If/when a resource is missing or unresolved some kind of place holder can > be used > h2. actual > * We have several GUI JPanel-s which act as containers for a "details" > screen, sub-panel layouts. > * In one of the sub-panels we introduced a resource bundle to display > options for check-boxes.. > * This details screen works as a sub-panel at run-time. > * This details screen works as in the GUI designer/builder fine. > * However whenever we load the parent panel, the container it fails with a > *{{MissingResourceException}}*. > !image-2018-04-10-10-32-31-818.png! > > * This is somewhat of a SHOW STOPPER as far as internationalisation goes for > reusable GUI components I'm afraid. > * The situation is quite mysterious as well since the Resource file is > found, loaded and displayed by the detail JPanel screen which is IN THE SAME > java Package at runtime and design time. > * The resource bundle itself is in the {{resources/bundles}} folder of > common library (Gradle directory layout) and is "fixed" so to speak at design > time. > * I believe there is some fundamental flaw here because you must have > parents able to load sub-components with or without any resource strings. > > h2. supporting information > {noformat} > --[ *stacktrace* ]-- > java.util.MissingResourceException: Can't find bundle for base name > bundles/SpaAssurancesText, locale en_AU > at > java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2055) > at > java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1689) > at > java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1593) > at > java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1556) > at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:857) > at > au.com.fourtel.fourabs.client.spas.JPanelSpaDetails.initComponents(JPanelSpaDetails.java:1608) > at > au.com.fourtel.fourabs.client.spas.JPanelSpaDetails.<init>(JPanelSpaDetails.java:148) > at > au.com.fourtel.fourabs.client.spas.JPanelSpaDetails.<init>(JPanelSpaDetails.java:141) > at > java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native > Method) > at > java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) > at > java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > at > java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:488) > at java.base/java.lang.Class.newInstance(Class.java:560) > at > org.netbeans.modules.form.CreationFactory.createDefaultInstance(CreationFactory.java:155) > at > org.netbeans.modules.form.RADComponent.createBeanInstance(RADComponent.java:227) > at > org.netbeans.modules.form.RADComponent.initInstance(RADComponent.java:166) > at > org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:755) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:943) > at > org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:799) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:943) > at > org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:799) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:943) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:478) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:258) > at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:327) > at org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:268) > at > org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:115) > at > org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:75) > at > org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:71) > at org.openide.util.Mutex.readAccess(Mutex.java:225) > at > org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:251) > at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:324) > at > org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:436) > at > org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:256) > at > org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:64) > at > org.netbeans.modules.nbform.FormDesignerTC$PreLoadTask$1.run(FormDesignerTC.java:245) > at > java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313) > at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770) > at java.desktop/java.awt.EventQueue.access$600(EventQueue.java:97) > at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) > at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) > at java.base/java.security.AccessController.doPrivileged(Native Method) > at > java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) > at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740) > at > org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) > 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) > java.io.IOException: Undefined component referenced in layout: > jPanelSpaDetails > at > org.netbeans.modules.form.layoutdesign.LayoutPersistenceManager.correctMissingName(LayoutPersistenceManager.java:712) > at > org.netbeans.modules.form.layoutdesign.LayoutPersistenceManager.loadLayout(LayoutPersistenceManager.java:388) > at > org.netbeans.modules.form.layoutdesign.LayoutPersistenceManager.loadContainer(LayoutPersistenceManager.java:354) > at > org.netbeans.modules.form.layoutdesign.LayoutModel.loadContainerLayout(LayoutModel.java:1206) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:973) > at > org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:799) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:943) > at > org.netbeans.modules.form.GandalfPersistenceManager.restoreComponent(GandalfPersistenceManager.java:799) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadComponent(GandalfPersistenceManager.java:943) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:478) > at > org.netbeans.modules.form.GandalfPersistenceManager.loadForm(GandalfPersistenceManager.java:258) > at org.netbeans.modules.form.FormEditor$2.run(FormEditor.java:327) > at org.netbeans.modules.form.FormLAF$2.run(FormLAF.java:268) > at > org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:115) > at > org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:75) > at > org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:71) > at org.openide.util.Mutex.readAccess(Mutex.java:225) > at > org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:251) > at org.netbeans.modules.form.FormEditor.loadFormData(FormEditor.java:324) > at > org.netbeans.modules.nbform.FormEditorSupport.loadOpeningForm(FormEditorSupport.java:436) > at > org.netbeans.modules.nbform.FormDesignerTC.loadForm(FormDesignerTC.java:256) > at > org.netbeans.modules.nbform.FormDesignerTC.access$300(FormDesignerTC.java:64) > at > org.netbeans.modules.nbform.FormDesignerTC$PreLoadTask$1.run(FormDesignerTC.java:245) > at > java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313) > at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770) > at java.desktop/java.awt.EventQueue.access$600(EventQueue.java:97) > at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721) > at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715) > at java.base/java.security.AccessController.doPrivileged(Native Method) > at > java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87) > at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740) > at > org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:136) > 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) > {noformat} -- This message was sent by Atlassian JIRA (v7.6.3#76005) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@netbeans.apache.org For additional commands, e-mail: commits-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists