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中文網其他相關文章!