-3

I got an exception while using JProgressBar to load some datas and updating the gui when clicking a JButton but it's not always throwing the exception instead when clicking the button for next time it show up no error no glitch but it's still throwing sometimes.I'm confused don't know what to set the title name

Image of the glitchenter image description here

This is the Exception i got

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.plaf.basic.BasicProgressBarUI.updateSizes(BasicProgressBarUI.java:488)
    at javax.swing.plaf.basic.BasicProgressBarUI.getBox(BasicProgressBarUI.java:445)
    at javax.swing.plaf.basic.BasicProgressBarUI.paintIndeterminate(BasicProgressBarUI.java:600)
    at javax.swing.plaf.metal.MetalProgressBarUI.paintIndeterminate(MetalProgressBarUI.java:143)
    at javax.swing.plaf.basic.BasicProgressBarUI.paint(BasicProgressBarUI.java:410)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:161)
    at javax.swing.JComponent.paintComponent(JComponent.java:780)
    at javax.swing.JComponent.paint(JComponent.java:1056)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paint(JComponent.java:1065)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paint(JComponent.java:1065)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paint(JComponent.java:1065)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paint(JComponent.java:1065)
    at javax.swing.JLayeredPane.paint(JLayeredPane.java:586)
    at javax.swing.JComponent.paintChildren(JComponent.java:889)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5217)
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1579)
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1502)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1272)
    at javax.swing.JComponent.paint(JComponent.java:1042)
    at java.awt.GraphicsCallback$PaintCallback.run(GraphicsCallback.java:39)
    at sun.awt.SunGraphicsCallback.runOneComponent(SunGraphicsCallback.java:79)
    at sun.awt.SunGraphicsCallback.runComponents(SunGraphicsCallback.java:116)
    at java.awt.Container.paint(Container.java:1978)
    at java.awt.Window.paint(Window.java:3906)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:842)
    at javax.swing.RepaintManager$4.run(RepaintManager.java:814)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:814)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:789)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:738)
    at javax.swing.RepaintManager.access$1200(RepaintManager.java:64)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1732)
    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:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:109)
    at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:190)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:235)
    at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:233)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:233)
    at java.awt.Dialog.show(Dialog.java:1084)
    at java.awt.Component.show(Component.java:1671)
    at java.awt.Component.setVisible(Component.java:1623)
    at java.awt.Window.setVisible(Window.java:1014)
    at java.awt.Dialog.setVisible(Dialog.java:1005)
    at school_software.Home.openWindow(Home.java:1635)
    at school_software.Home.studentManagementMousePressed(Home.java:1494)
    at school_software.Home.access$1100(Home.java:51)
    at school_software.Home$4.mousePressed(Home.java:411)
    at java.awt.Component.processMouseEvent(Component.java:6536)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6304)
    at java.awt.Container.processEvent(Container.java:2239)
    at java.awt.Component.dispatchEventImpl(Component.java:4889)
    at java.awt.Container.dispatchEventImpl(Container.java:2297)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4904)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4532)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
    at java.awt.Container.dispatchEventImpl(Container.java:2283)
    at java.awt.Window.dispatchEventImpl(Window.java:2746)
    at java.awt.Component.dispatchEvent(Component.java:4711)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760)
    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:74)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:84)
    at java.awt.EventQueue$4.run(EventQueue.java:733)
    at java.awt.EventQueue$4.run(EventQueue.java:731)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:730)
    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)

This is the Code I'm using JProgressBar

//Constructor I'm calling this from another JFrame
public studentManagementDailog1(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        initComponents();
        filePath.setVisible(false);
        worker = new LoadWorker();
        worker.execute();
        tableCustomization.customizedJTable(studentListsTable);
        tableCustomization.customizedJTableWithScrollPane(detailTable, jScrollPane6);
        tableCustomization.setCustomTableWidth(detailTable, 200);
    }
//



    private class LoadWorker extends SwingWorker<Boolean, Object[]> {

        @Override
        protected void done() {
            try {
                if (get() != null) {
                    lblInfo.setText("Total data: " + studentListsTable.getRowCount());
                    pgbMain.setIndeterminate(false);
                    pgbMain.setVisible(false);
                }
            } catch (InterruptedException | ExecutionException ex) {
                Logger.getLogger(classroomManagementDailog.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        @Override
        protected Boolean doInBackground() throws SQLException, InterruptedException, ClassNotFoundException, Exception {
            pgbMain.setIndeterminate(true);
            lblInfo.setText("Fetching data. . .");

            MysqlData mysqlData = MysqlData.getInstance();
            mysqlData.connectiontoServer();

            removeAllRow(studentListsTable);
            mysqlData.readData("select * from students order by classroom,rollno,section");
            ResultSet rs = mysqlData.getdata();
            if (rs.isBeforeFirst()) { // check is resultset not empty
                while (rs.next()) {
                    Object data[] = {
                        rs.getInt("s_id"),
                        rs.getString("fullname"),
                        rs.getString("temporaryaddress"),
                        rs.getLong("phoneno"),
                        rs.getString("gender"),
                        rs.getInt("classroom"),
                        rs.getString("section"),
                        rs.getInt("rollno")
                    };
                    publish(data);
                }
            } else {
                lblInfo.setText("Data not found!");
            }

            jocHyperlink1.setEnabled(false);
            studentDetailByTable(detailTable, "select * from students");
            loadClassroom();
            loadSection();

            //Closing & Flushing the connection
            rs.close();
            Thread.sleep(1000);
            return true;
        }

        @Override
        protected void process(java.util.List<Object[]> chunks) {
            DefaultTableModel tableModel = (DefaultTableModel) studentListsTable.getModel();
            for (int i = 0; i < chunks.size(); i++) {
                Object[] data = chunks.get(i);
                tableModel.addRow(data);
            }
        }
    }
  • 1
    For one, you're mutating Swing properties from a background thread, from within the doInBackground method, and this can cause all sorts of weird threading errors or NullPointerExceptions. – Hovercraft Full Of Eels May 22 '21 at 13:28
  • 1
    For another, where is this line of code `school_software.Home.openWindow(Home.java:1635)`? – Hovercraft Full Of Eels May 22 '21 at 13:29
  • 1
    That is where the NPE is being thrown. Also, a class should not have 1635 or more lines in it suggesting that this code needs to be greatly refactored. – Hovercraft Full Of Eels May 22 '21 at 13:30
  • ok wait I'll upload the code of 1635 – Sunil Bohara May 22 '21 at 13:33
  • 1
    Good, but know that you will have to re-write the entire SwingWorker so that it behaves correctly. Also, your code after you call `execute()` on the worker looks suspect, as if you're using fields that are being changed within the background thread before the changes have been made. Likely some of that code should be in a call-back method. – Hovercraft Full Of Eels May 22 '21 at 13:34
  • public void openWindow(JDialog dialogName) {dailogName.setLocationRelativeTo(null)}; – Sunil Bohara May 22 '21 at 13:35
  • there is nothing I'm just changing the visibility of JDailog in code 1635 – Sunil Bohara May 22 '21 at 13:40
  • Let us [continue this discussion in chat](https://chat.stackoverflow.com/rooms/232730/discussion-between-sunil-bohara-and-hovercraft-full-of-eels). – Sunil Bohara May 22 '21 at 13:44
  • all sorts of weird threading errors common look at the code I'm using the swing worker class in a correct way and read the description i mentioned that it's giving exception sometimes only maybe like once in a week or I'm not sure – Sunil Bohara May 22 '21 at 14:18
  • Again look inside your SwingWorker: Again, you are mutating the state of Swing GUI components within the doInBackground method, and again this is not proper use of the worker. Swing component state should only be mutated on the event thread. – Hovercraft Full Of Eels May 22 '21 at 15:55
  • Hey please can you give an easy understanding example with sample code I'm stuck – Sunil Bohara May 22 '21 at 16:52
  • https://pastebin.com/P8v7hj8b – Sunil Bohara May 22 '21 at 17:17

0 Answers0