[ 
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

Reply via email to