https://github.com/carlb710/myProgram
I'm using IntelliJ Swing GUI editor to make the front-end of my program. Based on the int value returned by a spinner, certain elements of the GUI are shown or hidden. Every time I change that int value and restart the program, one of many exceptions is thrown, all NullPointer Exceptions. I think they are always in the same thread, it's just the reason that varies.
Error usually looks something like these below:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot read field "top" because "topInsets" is null
at java.desktop/com.apple.laf.AquaTabbedPaneCopyFromBasicUI.rotateInsets(AquaTabbedPaneCopyFromBasicUI.java:2000)
at java.desktop/com.apple.laf.AquaTabbedPaneCopyFromBasicUI.getTabAreaInsets(AquaTabbedPaneCopyFromBasicUI.java:1681)
at java.desktop/com.apple.laf.AquaTabbedPaneUI$AquaTruncatingTabbedPaneLayout.superCalculateTabRects(AquaTabbedPaneUI.java:1133)
at java.desktop/com.apple.laf.AquaTabbedPaneUI$AquaTruncatingTabbedPaneLayout.calculateTabRects(AquaTabbedPaneUI.java:1091)
at java.desktop/com.apple.laf.AquaTabbedPaneCopyFromBasicUI$TabbedPaneLayout.calculateLayoutInfo(AquaTabbedPaneCopyFromBasicUI.java:2322)
at java.desktop/com.apple.laf.AquaTabbedPaneCopyFromBasicUI$TabbedPaneLayout.layoutContainer(AquaTabbedPaneCopyFromBasicUI.java:2226)
at java.desktop/java.awt.Container.layout(Container.java:1538)
at java.desktop/java.awt.Container.doLayout(Container.java:1527)
at java.desktop/java.awt.Container.validateTree(Container.java:1723)
at java.desktop/java.awt.Container.validate(Container.java:1658)
at java.desktop/com.apple.laf.AquaTabbedPaneCopyFromBasicUI.ensureCurrentLayout(AquaTabbedPaneCopyFromBasicUI.java:1335)
at java.desktop/com.apple.laf.AquaTabbedPaneUI.paint(AquaTabbedPaneUI.java:148)
at java.desktop/javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
at java.desktop/javax.swing.JComponent.paintComponent(JComponent.java:797)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1074)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1083)
at java.desktop/javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
at java.desktop/javax.swing.JComponent.paintChildren(JComponent.java:907)
at java.desktop/javax.swing.JComponent.paintToOffscreen(JComponent.java:5271)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBufferedImpl(RepaintManager.java:1643)
at java.desktop/javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1618)
at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1556)
at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1323)
at java.desktop/javax.swing.JComponent.paint(JComponent.java:1060)
at java.desktop/java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
at java.desktop/sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:75)
at java.desktop/sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:112)
at java.desktop/java.awt.Container.paint(Container.java:2003)
at java.desktop/java.awt.Window.paint(Window.java:3949)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:876)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:848)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:848)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:823)
at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:772)
at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1884)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:316)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
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(AccessController.java:391)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
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)
The exceptions seem to be thrown when I run the following code in my main class to create the JFrame instance for my program:
App window = null;
try{
window = new App();
} catch(NullPointerException e){
e.printStackTrace();
}
JFrame frame = new JFrame("Java QA Checker");
frame.setContentPane(window.landing);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
Font font = new Font("Helvetica", Font.PLAIN, 16);
My GUI constructor looks like this where I think the issue is coming from:
//listener for spinner, changes number of elements on screen
spinner1.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
numOfFiles = (Integer) spinner1.getValue();
//switch statement sets number of elements for file settings visible or not based on spinner value up to 12
try {
switch(numOfFiles){
case 0:{
file1OriginLabel.setVisible(true);
file2OriginLabel.setVisible(true);
file3OriginLabel.setVisible(true);
file4OriginLabel.setVisible(true);
file5OriginLabel.setVisible(true);
file6OriginLabel.setVisible(true);
file7OriginLabel.setVisible(true);
file8OriginLabel.setVisible(true);
file9OriginLabel.setVisible(true);
file10OriginLabel.setVisible(true);
file11OriginLabel.setVisible(true);
file12OriginLabel.setVisible(true);
file1OriginInputted.setVisible(true);
file2OriginInputted.setVisible(true);
file3OriginInputted.setVisible(true);
file4OriginInputted.setVisible(true);
file5OriginInputted.setVisible(true);
file6OriginInputted.setVisible(true);
file7OriginInputted.setVisible(true);
file8OriginInputted.setVisible(true);
file9OriginInputted.setVisible(true);
file10OriginInputted.setVisible(true);
file11OriginInputted.setVisible(true);
file12OriginInputted.setVisible(true);
addFileButton1.setVisible(true);
addFileButton2.setVisible(true);
addFileButton3.setVisible(true);
addFileButton4.setVisible(true);
addFileButton5.setVisible(true);
addFileButton6.setVisible(true);
addFileButton7.setVisible(true);
addFileButton8.setVisible(true);
addFileButton9.setVisible(true);
addFileButton10.setVisible(true);
addFileButton11.setVisible(true);
addFileButton12.setVisible(true);
filePathLabel1.setVisible(true);
filePathLabel2.setVisible(true);
filePathLabel3.setVisible(true);
filePathLabel4.setVisible(true);
filePathLabel5.setVisible(true);
filePathLabel6.setVisible(true);
filePathLabel7.setVisible(true);
filePathLabel8.setVisible(true);
filePathLabel9.setVisible(true);
filePathLabel10.setVisible(true);
filePathLabel11.setVisible(true);
filePathLabel12.setVisible(true);
} break;
case 1:{
file1OriginLabel.setVisible(true);
file2OriginLabel.setVisible(false);
file3OriginLabel.setVisible(false);
file4OriginLabel.setVisible(false);
file5OriginLabel.setVisible(false);
file6OriginLabel.setVisible(false);
file7OriginLabel.setVisible(false);
file8OriginLabel.setVisible(false);
file9OriginLabel.setVisible(false);
file10OriginLabel.setVisible(false);
file11OriginLabel.setVisible(false);
file12OriginLabel.setVisible(false);
file1OriginInputted.setVisible(true);
file2OriginInputted.setVisible(false);
file3OriginInputted.setVisible(false);
file4OriginInputted.setVisible(false);
file5OriginInputted.setVisible(false);
file6OriginInputted.setVisible(false);
file7OriginInputted.setVisible(false);
file8OriginInputted.setVisible(false);
file9OriginInputted.setVisible(false);
file10OriginInputted.setVisible(false);
file11OriginInputted.setVisible(false);
file12OriginInputted.setVisible(false);
addFileButton1.setVisible(true);
addFileButton2.setVisible(false);
addFileButton3.setVisible(false);
addFileButton4.setVisible(false);
addFileButton5.setVisible(false);
addFileButton6.setVisible(false);
addFileButton7.setVisible(false);
addFileButton8.setVisible(false);
addFileButton9.setVisible(false);
addFileButton10.setVisible(false);
addFileButton11.setVisible(false);
addFileButton12.setVisible(false);
filePathLabel1.setVisible(true);
filePathLabel2.setVisible(false);
filePathLabel3.setVisible(false);
filePathLabel4.setVisible(false);
filePathLabel5.setVisible(false);
filePathLabel6.setVisible(false);
filePathLabel7.setVisible(false);
filePathLabel8.setVisible(false);
filePathLabel9.setVisible(false);
filePathLabel10.setVisible(false);
filePathLabel11.setVisible(false);
filePathLabel12.setVisible(false);
}break;
case 2:{
file1OriginLabel.setVisible(true);
file2OriginLabel.setVisible(true);
file3OriginLabel.setVisible(false);
file4OriginLabel.setVisible(false);
file5OriginLabel.setVisible(false);
file6OriginLabel.setVisible(false);
file7OriginLabel.setVisible(false);
file8OriginLabel.setVisible(false);
file9OriginLabel.setVisible(false);
file10OriginLabel.setVisible(false);
file11OriginLabel.setVisible(false);
file12OriginLabel.setVisible(false);
file1OriginInputted.setVisible(true);
file2OriginInputted.setVisible(true);
file3OriginInputted.setVisible(false);
file4OriginInputted.setVisible(false);
file5OriginInputted.setVisible(false);
file6OriginInputted.setVisible(false);
file7OriginInputted.setVisible(false);
file8OriginInputted.setVisible(false);
file9OriginInputted.setVisible(false);
file10OriginInputted.setVisible(false);
file11OriginInputted.setVisible(false);
file12OriginInputted.setVisible(false);
addFileButton1.setVisible(true);
addFileButton2.setVisible(true);
addFileButton3.setVisible(false);
addFileButton4.setVisible(false);
addFileButton5.setVisible(false);
addFileButton6.setVisible(false);
addFileButton7.setVisible(false);
addFileButton8.setVisible(false);
addFileButton9.setVisible(false);
addFileButton10.setVisible(false);
addFileButton11.setVisible(false);
addFileButton12.setVisible(false);
filePathLabel1.setVisible(true);
filePathLabel2.setVisible(true);
filePathLabel3.setVisible(false);
filePathLabel4.setVisible(false);
filePathLabel5.setVisible(false);
filePathLabel6.setVisible(false);
filePathLabel7.setVisible(false);
filePathLabel8.setVisible(false);
filePathLabel9.setVisible(false);
filePathLabel10.setVisible(false);
filePathLabel11.setVisible(false);
filePathLabel12.setVisible(false);
} break;
case 3:{
file1OriginLabel.setVisible(true);
file2OriginLabel.setVisible(true);
file3OriginLabel.setVisible(true);
file4OriginLabel.setVisible(false);
file5OriginLabel.setVisible(false);
file6OriginLabel.setVisible(false);
file7OriginLabel.setVisible(false);
file8OriginLabel.setVisible(false);
file9OriginLabel.setVisible(false);
file10OriginLabel.setVisible(false);
file11OriginLabel.setVisible(false);
file12OriginLabel.setVisible(false);
file1OriginInputted.setVisible(true);
file2OriginInputted.setVisible(true);
file3OriginInputted.setVisible(true);
file4OriginInputted.setVisible(false);
file5OriginInputted.setVisible(false);
file6OriginInputted.setVisible(false);
file7OriginInputted.setVisible(false);
file8OriginInputted.setVisible(false);
file9OriginInputted.setVisible(false);
file10OriginInputted.setVisible(false);
file11OriginInputted.setVisible(false);
file12OriginInputted.setVisible(false);
addFileButton1.setVisible(true);
addFileButton2.setVisible(true);
addFileButton3.setVisible(true);
addFileButton4.setVisible(false);
addFileButton5.setVisible(false);
addFileButton6.setVisible(false);
addFileButton7.setVisible(false);
addFileButton8.setVisible(false);
addFileButton9.setVisible(false);
addFileButton10.setVisible(false);
addFileButton11.setVisible(false);
addFileButton12.setVisible(false);
filePathLabel1.setVisible(true);
filePathLabel2.setVisible(true);
filePathLabel3.setVisible(true);
filePathLabel4.setVisible(false);
filePathLabel5.setVisible(false);
filePathLabel6.setVisible(false);
filePathLabel7.setVisible(false);
filePathLabel8.setVisible(false);
filePathLabel9.setVisible(false);
filePathLabel10.setVisible(false);
filePathLabel11.setVisible(false);
filePathLabel12.setVisible(false);
}break;
case 4:{..
} break;
//this goes until case 12, each just continues to make one more item .setVisible = true until all 12 elements are visible.
default: break;
}
} catch(NullPointerException e1){
e1.printStackTrace();
SwingUtilities.updateComponentTreeUI(landing);
}
SwingUtilities.updateComponentTreeUI(landing);
}
});
//additional code here that shouldn't be relevant to the issue
} ```
My issue was coming from the Main class that instantiated my GUI. I set the look and feel after creating the JFrame, when it should have been done before creating any GUI elements. This fixed my problem