首页 > Java > 正文

Java GUI 窗口将在启动时冻结

王林
发布: 2024-02-09 12:09:33
转载
758 人浏览过

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
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板