Home  >  Article  >  Java GUI window freezes on startup

Java GUI window freezes on startup

王林
王林forward
2024-02-09 12:09:33716browse

The freezing of the Java GUI window during startup is a common problem encountered by many developers. In this case, the user can't do anything and the window looks like it's stuck. The reason is generally because some operations during the window initialization process take too long, causing the interface to fail to respond normally. In order to solve this problem, we need to find the cause of the freeze and take corresponding measures. In this article, PHP editor Baicao will introduce some common solutions to help you solve the freezing problem when the Java GUI window starts.

Question content

This is a car wash gui program. Contains two classes Demo and Total, which after calculation will display the total in a new window. Everything was working fine, decided to run it one more time to submit the screenshot, but it got stuck, like the program was running but the window was frozen. I am using net bean drag and drop method. Enter image description here Demo class

package car.wash_05;

public class demo extends javax.swing.jframe {
    private double small_engine = 100.0;
    private double big_engine = 200.0;
    private double battery = 100.0;
    private double oi_filter = 70.0;
    private double brakes = 100.0;
    private double gears = 100.0;
    private double regular_wash = 50.0;
    private double wash_compound = 100.0;

    // declare variables to store the selected services
    private boolean smallengineselected = false;
    private boolean bigengineselected = false;
    private boolean batteryselected = false;
    private boolean oilandfilterselected = false;
    private boolean brakesselected = false;
    private boolean gearsselected = false;
    private boolean regularwashselected = false;
    private boolean washandcompoundselected = false;

    // declare a variable to store the subtotal price
    private double subtotal = 0.0;
    
    public demo() {
        system.out.println("before gui initialization");
initcomponents();
system.out.println("after gui initialization");
    }
    
     private void updatesubtotal() {
        subtotal = 0.0;

        if (smallengineselected) 
            subtotal += small_engine;

        if (bigengineselected)
            subtotal += big_engine;

        if (batteryselected) 
            subtotal += battery;

        if (oilandfilterselected)
            subtotal += oi_filter;

        if (brakesselected) 
            subtotal += brakes;

        if (gearsselected) 
            subtotal += gears;
     }
    @suppresswarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="generated code">                          
    private void initcomponents() {

        jradiobutton2 = new javax.swing.jradiobutton();
        jlabel1 = new javax.swing.jlabel();
        jpanel1 = new javax.swing.jpanel();
        jradiobutton1 = new javax.swing.jradiobutton();
        jradiobutton3 = new javax.swing.jradiobutton();
        jpanel2 = new javax.swing.jpanel();
        jradiobutton4 = new javax.swing.jradiobutton();
        jradiobutton5 = new javax.swing.jradiobutton();
        jradiobutton6 = new javax.swing.jradiobutton();
        jpanel3 = new javax.swing.jpanel();
        jcheckbox1 = new javax.swing.jcheckbox();
        jcheckbox2 = new javax.swing.jcheckbox();
        jcheckbox3 = new javax.swing.jcheckbox();
        jcheckbox4 = new javax.swing.jcheckbox();
        jbutton1 = new javax.swing.jbutton();
        jbutton2 = new javax.swing.jbutton();

        jradiobutton2.settext("jradiobutton2");

        setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close);
        settitle("auto tech and mech services");
        setenabled(false);

        jlabel1.settext("welcome to auto tech and mech services");

        jpanel1.setborder(javax.swing.borderfactory.createetchedborder());
        jpanel1.settooltiptext("");

        jradiobutton1.settext("small");
        jradiobutton1.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jradiobutton1actionperformed(evt);
            }
        });

        jradiobutton3.settext("big");
        jradiobutton3.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jradiobutton3actionperformed(evt);
            }
        });

        javax.swing.grouplayout jpanel1layout = new javax.swing.grouplayout(jpanel1);
        jpanel1.setlayout(jpanel1layout);
        jpanel1layout.sethorizontalgroup(
            jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(jpanel1layout.createsequentialgroup()
                .addcontainergap()
                .addgroup(jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
                    .addcomponent(jradiobutton1)
                    .addcomponent(jradiobutton3))
                .addcontainergap(10, short.max_value))
        );
        jpanel1layout.setverticalgroup(
            jpanel1layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(jpanel1layout.createsequentialgroup()
                .addgap(39, 39, 39)
                .addcomponent(jradiobutton1)
                .addgap(29, 29, 29)
                .addcomponent(jradiobutton3)
                .addcontainergap(javax.swing.grouplayout.default_size, short.max_value))
        );

        jpanel2.setborder(javax.swing.borderfactory.createetchedborder());
        jpanel2.setname(""); // noi18n

        jradiobutton4.settext("none");
        jradiobutton4.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jradiobutton4actionperformed(evt);
            }
        });

        jradiobutton5.settext("regular wash");
        jradiobutton5.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jradiobutton5actionperformed(evt);
            }
        });

        jradiobutton6.settext("wash & compound");
        jradiobutton6.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jradiobutton6actionperformed(evt);
            }
        });

        javax.swing.grouplayout jpanel2layout = new javax.swing.grouplayout(jpanel2);
        jpanel2.setlayout(jpanel2layout);
        jpanel2layout.sethorizontalgroup(
            jpanel2layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(jpanel2layout.createsequentialgroup()
                .addgroup(jpanel2layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
                    .addcomponent(jradiobutton4)
                    .addcomponent(jradiobutton5)
                    .addcomponent(jradiobutton6))
                .addgap(0, 0, short.max_value))
        );
        jpanel2layout.setverticalgroup(
            jpanel2layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(jpanel2layout.createsequentialgroup()
                .addgap(28, 28, 28)
                .addcomponent(jradiobutton4)
                .addgap(28, 28, 28)
                .addcomponent(jradiobutton5)
                .addpreferredgap(javax.swing.layoutstyle.componentplacement.related, javax.swing.grouplayout.default_size, short.max_value)
                .addcomponent(jradiobutton6)
                .addgap(14, 14, 14))
        );

        jpanel3.setborder(javax.swing.borderfactory.createetchedborder());
        jpanel3.settooltiptext("");
        jpanel3.setname(""); // noi18n

        jcheckbox1.settext("battery");
        jcheckbox1.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jcheckbox1actionperformed(evt);
            }
        });

        jcheckbox2.settext("oil filters");
        jcheckbox2.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jcheckbox2actionperformed(evt);
            }
        });

        jcheckbox3.settext("brakes");
        jcheckbox3.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jcheckbox3actionperformed(evt);
            }
        });

        jcheckbox4.settext("gear");
        jcheckbox4.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jcheckbox4actionperformed(evt);
            }
        });

        javax.swing.grouplayout jpanel3layout = new javax.swing.grouplayout(jpanel3);
        jpanel3.setlayout(jpanel3layout);
        jpanel3layout.sethorizontalgroup(
            jpanel3layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(jpanel3layout.createsequentialgroup()
                .addcontainergap()
                .addgroup(jpanel3layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
                    .addcomponent(jcheckbox1)
                    .addcomponent(jcheckbox2)
                    .addcomponent(jcheckbox3)
                    .addcomponent(jcheckbox4))
                .addcontainergap(105, short.max_value))
        );
        jpanel3layout.setverticalgroup(
            jpanel3layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(jpanel3layout.createsequentialgroup()
                .addgap(19, 19, 19)
                .addcomponent(jcheckbox1)
                .addgap(18, 18, 18)
                .addcomponent(jcheckbox2)
                .addgap(18, 18, 18)
                .addcomponent(jcheckbox3)
                .addgap(18, 18, 18)
                .addcomponent(jcheckbox4)
                .addcontainergap(8, short.max_value))
        );

        jbutton1.settext("calculate");
        jbutton1.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jbutton1actionperformed(evt);
            }
        });

        jbutton2.settext("exit");
        jbutton2.addactionlistener(new java.awt.event.actionlistener() {
            public void actionperformed(java.awt.event.actionevent evt) {
                jbutton2actionperformed(evt);
            }
        });

        javax.swing.grouplayout layout = new javax.swing.grouplayout(getcontentpane());
        getcontentpane().setlayout(layout);
        layout.sethorizontalgroup(
            layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(layout.createsequentialgroup()
                .addcontainergap()
                .addcomponent(jpanel1, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size)
                .addpreferredgap(javax.swing.layoutstyle.componentplacement.related)
                .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
                    .addcomponent(jlabel1)
                    .addgroup(layout.createsequentialgroup()
                        .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.trailing, false)
                            .addgroup(layout.createsequentialgroup()
                                .addcomponent(jbutton1)
                                .addpreferredgap(javax.swing.layoutstyle.componentplacement.related, javax.swing.grouplayout.default_size, short.max_value)
                                .addcomponent(jbutton2))
                            .addcomponent(jpanel3, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size))
                        .addpreferredgap(javax.swing.layoutstyle.componentplacement.related)
                        .addcomponent(jpanel2, javax.swing.grouplayout.preferred_size, javax.swing.grouplayout.default_size, javax.swing.grouplayout.preferred_size)))
                .addcontainergap(javax.swing.grouplayout.default_size, short.max_value))
        );
        layout.setverticalgroup(
            layout.createparallelgroup(javax.swing.grouplayout.alignment.leading)
            .addgroup(layout.createsequentialgroup()
                .addgap(12, 12, 12)
                .addcomponent(jlabel1)
                .addpreferredgap(javax.swing.layoutstyle.componentplacement.unrelated)
                .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.trailing, false)
                    .addcomponent(jpanel3, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, short.max_value)
                    .addcomponent(jpanel1, javax.swing.grouplayout.alignment.leading, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, short.max_value)
                    .addcomponent(jpanel2, javax.swing.grouplayout.default_size, javax.swing.grouplayout.default_size, short.max_value))
                .addpreferredgap(javax.swing.layoutstyle.componentplacement.related)
                .addgroup(layout.createparallelgroup(javax.swing.grouplayout.alignment.baseline)
                    .addcomponent(jbutton1)
                    .addcomponent(jbutton2))
                .addcontainergap(javax.swing.grouplayout.default_size, short.max_value))
        );

        jpanel1.getaccessiblecontext().setaccessiblename("");
        jpanel2.getaccessiblecontext().setaccessiblename("");

        pack();
    }// </editor-fold>                        
    //small engine ratio button
    private void jradiobutton1actionperformed(java.awt.event.actionevent evt) {                                              

                smallengineselected = true;
                bigengineselected = false;
                jradiobutton3.setselected(false);
                updatesubtotal();
    }                                             
    
    //big engine ratio button
    private void jradiobutton3actionperformed(java.awt.event.actionevent evt) {                                              
        bigengineselected = true;
        smallengineselected = false;
        jradiobutton1.setselected(false);
        updatesubtotal();
    }                                             

    //oil filter check button
    private void jcheckbox2actionperformed(java.awt.event.actionevent evt) {                                           
       oilandfilterselected = jcheckbox2.isselected();
                updatesubtotal();
    }                                          

    //none ration button
    private void jradiobutton4actionperformed(java.awt.event.actionevent evt) {                                              
washandcompoundselected = false;
         regularwashselected = false ; 
         jradiobutton5.setselected(false);
         jradiobutton6.setselected(false);
    }                                             
    
    //battery check button
    private void jcheckbox1actionperformed(java.awt.event.actionevent evt) {                                           
        batteryselected = jcheckbox1.isselected();
                updatesubtotal();
    }                                          

    //brakes check button
    private void jcheckbox3actionperformed(java.awt.event.actionevent evt) {                                           
        brakesselected = jcheckbox3.isselected();
                updatesubtotal();
    }                                          
    
    //gear check button
    private void jcheckbox4actionperformed(java.awt.event.actionevent evt) {                                           
        gearsselected = jcheckbox4.isselected();
                updatesubtotal();
    }                                          

    //rugular was ration button
    private void jradiobutton5actionperformed(java.awt.event.actionevent evt) {                                              
        regularwashselected = true;
        washandcompoundselected =false;
        jradiobutton6.setselected(false);
                updatesubtotal();
    }                                             

    //wash and compound ration button
    private void jradiobutton6actionperformed(java.awt.event.actionevent evt) {                                              
         washandcompoundselected = true;
         regularwashselected = false;
         jradiobutton5.setselected(false);
                updatesubtotal();
    }                                             
    
    //calculate button
    private void jbutton1actionperformed(java.awt.event.actionevent evt) {                                         
        double total = subtotal + (subtotal * 0.1);
        double tax=subtotal * 0.1;
        total totalframe = new total(total, subtotal, tax);
        totalframe.setvisible(true);
        
    }                                        

    //exit button
    private void jbutton2actionperformed(java.awt.event.actionevent evt) {                                         
        system.exit(0);
    }                                        

    public static void main(string args[]) {
        java.awt.eventqueue.invokelater(new runnable() {
            public void run() {
                new demo().setvisible(true);
            }
        });
    }

    // variables declaration - do not modify                     
    private javax.swing.jbutton jbutton1;
    private javax.swing.jbutton jbutton2;
    private javax.swing.jcheckbox jcheckbox1;
    private javax.swing.jcheckbox jcheckbox2;
    private javax.swing.jcheckbox jcheckbox3;
    private javax.swing.jcheckbox jcheckbox4;
    private javax.swing.jlabel jlabel1;
    private javax.swing.jpanel jpanel1;
    private javax.swing.jpanel jpanel2;
    private javax.swing.jpanel jpanel3;
    private javax.swing.jradiobutton jradiobutton1;
    private javax.swing.jradiobutton jradiobutton2;
    private javax.swing.jradiobutton jradiobutton3;
    private javax.swing.jradiobutton jradiobutton4;
    private javax.swing.jradiobutton jradiobutton5;
    private javax.swing.jradiobutton jradiobutton6;
    // end of variables declaration                   
}

Total Class

package car.wash_05;
public class Total extends javax.swing.JFrame {

    public Total() {
        
    }

    public Total(double tota, double subtota, double ta) {
        initComponents();
        jLabel1.setText("Subtotal: $" + subtota);
        jLabel2.setText("tax: $" + ta);
        jLabel3.setText("Total: $" + tota);
        
    }


    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Total");

        jButton1.setText("Ok");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        jLabel1.setText("jLabel1");

        jLabel2.setText("jLabel2");

        jLabel3.setText("jLabel3");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(32, 32, 32)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1)
                            .addComponent(jLabel3)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(101, 101, 101)
                        .addComponent(jButton1)))
                .addContainerGap(105, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(20, Short.MAX_VALUE)
                .addComponent(jLabel1)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel2)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabel3)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jButton1)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        
//ok button
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
         this.dispose();
    }                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Total().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    // End of variables declaration                   
}

I tried adding the check, restarting the system and reinstalling java. It doesn't work. It just freezes and even the close and other buttons don't work, it has to be force selected from task manager.

Solution

What did you do wrong

In line 75 of the initcomponents method, you are using setenabled(false) This will disable the window and all of its children (all on the frame component), so it feels like your window is frozen.

To resolve this issue, simply remove the line setenabled(false)

from the following code
/* rest of your code */

jradiobutton2.settext("jradiobutton2");

setdefaultcloseoperation(javax.swing.windowconstants.exit_on_close);
settitle("auto tech and mech services");
setenabled(false); //line causing this issue

jlabel1.settext("welcome to auto tech and mech services");

/* rest of your code */

Some more important things to remember

• Remember naming convention! Avoid naming classes demo.java, instead use demo.java.

• Secondly, you don't need a separate method to handle the executed action, just move it directly into the action listener of button.addactionlistener.

• Third (and this is personal preference), you don’t need to use -

java.awt.eventqueue.invokelater(new runnable() {
    public void run() {
         new demo().setvisible(true);
    }
});

You can use lambda to shorten this code (learn more here) and make the code only one line, as shown below.

java.awt.EventQueue.invokeLater(() -> new Demo().setVisible(true));

The above is the detailed content of Java GUI window freezes on startup. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete