首頁  >  文章  >  Java GUI 視窗將在啟動時凍結

Java GUI 視窗將在啟動時凍結

王林
王林轉載
2024-02-09 12:09:33716瀏覽

Java GUI 視窗在啟動時出現凍結現像是許多開發者常遇到的問題。在這種情況下,用戶無法進行任何操作,視窗看起來像是卡住了。究其原因,一般是因為視窗初始化過程中的某些操作耗時過長,導致介面無法正常回應。為了解決這個問題,我們需要找到凍結的原因,並採取相應的解決措施。在這篇文章中,php小編百草將為大家介紹一些常見的解決方法,幫助您解決Java GUI視窗啟動時的凍結問題。

問題內容

這是洗車的 gui 程式。包含兩個類別演示和總計,計算後將在新視窗中顯示總計。一切工作正常,決定再運行一次以提交螢幕截圖,但它卡住了,就像程式正在運行但視窗凍結一樣。我正在使用 net bean 拖放方法。 在此輸入影像描述 演示類別

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                   
}

總班級

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                   
}

我嘗試新增檢查,重新啟動系統並重新安裝java。它不起作用。它只是凍結,甚至關閉和其他按鈕都不起作用,必須從任務管理器中強制選擇它。

解決方法

你做錯了什麼

initcomponents 方法的第75 行,您正在使用setenabled(false) 這將停用視窗及其所有子項目(框架上的所有組件),因此感覺您的視窗是凍結。

要解決此問題,只需從以下程式碼中刪除行 setenabled(false)

#
/* 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 */

需要記住的一些更重要的事情

• 記得命名約定!避免將類別命名為 demo.java,而是使用 demo.java

• 其次,您不需要單獨的方法來處理執行的操作,只需將其直接移至 button.addactionlistener 的操作偵聽器中。

• 第三(這是個人喜好),你不需要使用-

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

您可以使用 lambda 來縮短此程式碼(了解更多 這裡)並使程式碼只有一行,如下所示。

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

以上是Java GUI 視窗將在啟動時凍結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除