Le blocage de la fenêtre de l'interface graphique Java au démarrage est un problème courant rencontré par de nombreux développeurs. Dans ce cas, l'utilisateur ne peut rien faire et la fenêtre semble bloquée. La raison est généralement due au fait que certaines opérations pendant le processus d'initialisation de la fenêtre prennent trop de temps, ce qui empêche l'interface de répondre normalement. Afin de résoudre ce problème, nous devons trouver la cause du gel et prendre les mesures correspondantes. Dans cet article, l'éditeur PHP Baicao présentera quelques solutions courantes pour vous aider à résoudre le problème de gel au démarrage de la fenêtre de l'interface graphique Java.
Il s'agit d'un programme graphique de lavage de voiture. Contient deux classes Démo et Total, qui après calcul afficheront le total dans une nouvelle fenêtre. Tout fonctionnait bien, j'ai décidé de l'exécuter une fois de plus pour soumettre la capture d'écran, mais elle est restée bloquée, comme si le programme était en cours d'exécution mais que la fenêtre était gelée. J'utilise la méthode glisser-déposer Net Bean. Entrez la description de l'image ici Cours de démonstration
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 }
Classe totale
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 }
J'ai essayé d'ajouter le chèque, de redémarrer le système et de réinstaller Java. Ça ne marche pas. Il se bloque et même les boutons de fermeture et autres ne fonctionnent pas, il doit être sélectionné de force dans le gestionnaire de tâches.
Dans initcomponents
方法的第 75 行,您正在使用 setenabled(false)
Cela désactivera la fenêtre et tous ses enfants (tous les composants du cadre), vous aurez donc l'impression que votre fenêtre est gelée.
Pour résoudre ce problème, supprimez simplement la ligne du code suivant 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 */
• N'oubliez pas les conventions de dénomination ! Évitez de nommer les classes demo.java
,而是使用 demo.java
.
• Deuxièmement, vous n'avez pas besoin d'une méthode distincte pour gérer l'action exécutée, il suffit de la déplacer directement dans l'écouteur d'action de button.addactionlistener
.
• Troisièmement (et c'est une préférence personnelle), vous n'avez pas besoin d'utiliser -
java.awt.eventqueue.invokelater(new runnable() { public void run() { new demo().setvisible(true); } });
Vous pouvez raccourcir ce code en utilisant lambda (en savoir plus ici) et faire en sorte que le code ne comporte qu'une seule ligne, comme indiqué ci-dessous.
java.awt.EventQueue.invokeLater(() -> new Demo().setVisible(true));
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!