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中文网其他相关文章!