cmolodowitch opened a new issue, #5791:
URL: https://github.com/apache/netbeans/issues/5791

   ### Apache NetBeans version
   
   Apache NetBeans 17
   
   ### What happened
   
   ### Issue
   If you create a custom Java Swing GUI component that declares an Apache 
log4j2 Logger without specifying the class, and then try to use that component 
in another custom Java Swing GUI component using the GUI builder, the parent 
GUI builder fails to load the child component with a nested 
UnsupportedOperationException from log4j2.  See attached sample stacktrace.
   
   ### Expected Behavior
   The GUI builder for the parent should be able to load the child component 
without throwing the UnsupportedOperationException.
   
   ### Notes
   Interestingly, the GUI builder for the child component itself is fine - it 
will load without any problems.  It's just when the parent container tries to 
load that the GUI builder throws an error.
   
   This is presumably related to log4j2 being a multi-release jar, and changes 
in JDK 9+.  If you use an older version of Netbeans that can run on JDK 8 (I 
tried it with Netbeans 12.6), the GUI builder has no issues.
   
   ### Workaround
   Specify the class name when creating an Apache log4j2 Logger.
   
   
[sample_stacktrace.txt](https://github.com/apache/netbeans/files/11180971/sample_stacktrace.txt)
   
   ### How to reproduce
   
   In Netbeans 17 running on JDK 11+, create a custom Swing component - this 
can be done either using one of the GUI Builder forms or just manually creating 
the class.  Declare an Apache log4j2 Logger property without specifying the 
class name:
   
   Create another Swing GUI JPanel form class.  Try to drag the child component 
into the new JPanel form in the GUI Builder - this will trigger an 
ExceptionInitializerError with a nested UnsupportedOperationException.
   
   Alternatively, use LOG declarations that specify the class names and drag 
the ChildPanel/ChildTable into the ParentPanel GUI Builder.  Close the 
ParentPanel class and modify the ChildPanel/ChildTable to use the LOG 
declarations that don't specify the class name.  Then re-open the ParentPanel 
class to reload the GUI Builder and trigger exceptions when initializing the 
child components.
   
   Sample stacktrace attached.
   
   ```java
   // ChildPanel created using Netbeans "new JPanel Form..." creation
   // Note that the GUI Builder for this class displays with no issues, no 
matter how the LOG is created.
   public class ChildPanel extends javax.swing.JPanel {
       // Using this declaration causes an error in the parent GUI Builder
       private static final Logger LOG = LogManager.getLogger();
       // Specifying the class removes the error
       // private static final Logger LOG = 
LogManager.getLogger(ChildPanel.class);
   }
   
   // ChildTable written manually, without a GUI Builder
   public class ChildTable extends JTable {
       // Using this declaration causes an error in the parent GUI Builder
       private static final Logger LOG = LogManager.getLogger();
       // Specifying the class removes the error
       // private static final Logger LOG = 
LogManager.getLogger(ChildTable.class);
   }
   
   // ParentPanel created using Netbeans "new JPanel Form..." creation
   // In GUI Builder, try to drag either ChildPanel or ChildTable into the 
panel to trigger an exception.
   public class ParentPanel extends javax.swing.JPanel {
   }
   ```
   
   ### Did this work correctly in an earlier version?
   
   No / Don't know
   
   ### Operating System
   
   Windows 10 Pro
   
   ### JDK
   
   JDK 17
   
   ### Apache NetBeans packaging
   
   Apache NetBeans provided installer
   
   ### Anything else
   
   This error occurs no matter what JDK the Java project uses - it's dependent 
on the JDK version used by Netbeans, not on the project JDK.
   
   ### Are you willing to submit a pull request?
   
   No


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists

Reply via email to