java - 使用线程 "AWT-EventQueue-0"java.lang.IllegalStateException

标签 java multithreading swing jpanel illegalstateexception

注意:我放了一个完整的代码示例以使其对任何用户都可执行;我的真实代码很长!

我有时会得到这个异常:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException:
javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,
alignmentX=0.0,   alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@24dab6,
flags=9,maximumSize=,minimumSize=,preferredSize=] is not attached to a horizontal group

Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException:
javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,
alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@bab939,
flags=9,maximumSize=,minimumSize=,preferredSize=] is not attached to a vertical group

我正在使用执行任务的线程......就像这样

当事件发生时,我需要将一个面板放入另一个新面板

private void insertPanelInPanel(JPanel jpContainer, JPanel jpContained) {
  GroupLayout jpContainerLayout = (GroupLayout)jpContainer.getLayout();
  jpContainer.removeAll();
  //GroupLayout jpContainerLayout = new GroupLayout(jpContainer);
  //jpContainer.setLayout(jpContainerLayout);

  jpContainerLayout.setHorizontalGroup(
    jpContainerLayout.createParallelGroup()
          .addComponent(jpContained)
  );
  jpContainerLayout.setVerticalGroup(
    jpContainerLayout.createParallelGroup()
          .addComponent(jpContained)
  );
}

当调整 JFrame 大小时,抛出 componentResized.....

    package test;
    import java.awt.*;
    import java.util.*;
    import java.util.List;
    import java.util.Map.Entry;
    import javax.swing.*;

    public class NewJFrame extends javax.swing.JFrame {

      Thread thrdOne = null;
      Thread thrdTwo = null;

        public NewJFrame() {
          initComponents();
        }


      private boolean isRunningPlotThreads() {
        boolean isRunning = false;
        if (!(thrdOne == null)) {
          if (thrdOne.getState() == Thread.State.TERMINATED) {
            thrdOne = null;
          } else {
            isRunning = true;
          }
        }
        if (!(thrdTwo == null)) {
          if (thrdTwo.getState() == Thread.State.TERMINATED) {
            thrdTwo = null;
          } else {
            isRunning = true;
          }
        }
        return isRunning;
      }

      private void insertPanelInPanel(JPanel jpContainer, JPanel jpContained) {
        GroupLayout jpContainerLayout = (GroupLayout)jpContainer.getLayout();
        jpContainer.removeAll();
    //    GroupLayout jpContainerLayout = new GroupLayout(jpContainer);
    //    jpContainer.setLayout(jpContainerLayout);
        jpContainerLayout.setHorizontalGroup(
          jpContainerLayout.createParallelGroup()
                .addComponent(jpContained)
        );
        jpContainerLayout.setVerticalGroup(
          jpContainerLayout.createParallelGroup()
                .addComponent(jpContained)
        );
      }


        @SuppressWarnings("unchecked")
      // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
      private void initComponents() {

        jtpBot = new javax.swing.JTabbedPane();
        jpOne = new javax.swing.JPanel();
        jbFirst = new javax.swing.JButton();
        jpOnePlot = new javax.swing.JPanel();
        jpTwo = new javax.swing.JPanel();
        jbTwo = new javax.swing.JButton();
        jpTwoPlot = new javax.swing.JPanel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(255, 255, 255));
        addComponentListener(new java.awt.event.ComponentAdapter() {
          public void componentResized(java.awt.event.ComponentEvent evt) {
            formComponentResized(evt);
          }
        });

        jtpBot.setBackground(new java.awt.Color(0, 0, 0));
        jtpBot.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        jpOne.setBackground(new java.awt.Color(0, 191, 191));

        jbFirst.setText("First");
        jbFirst.setMaximumSize(new java.awt.Dimension(70, 23));
        jbFirst.setMinimumSize(new java.awt.Dimension(70, 23));
        jbFirst.setPreferredSize(new java.awt.Dimension(70, 23));
        jbFirst.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
            jbFirstActionPerformed(evt);
          }
        });

        jpOnePlot.setBackground(new java.awt.Color(191, 191, 191));
        jpOnePlot.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        javax.swing.GroupLayout jpOnePlotLayout = new javax.swing.GroupLayout(jpOnePlot);
        jpOnePlot.setLayout(jpOnePlotLayout);
        jpOnePlotLayout.setHorizontalGroup(
          jpOnePlotLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGap(0, 291, Short.MAX_VALUE)
        );
        jpOnePlotLayout.setVerticalGroup(
          jpOnePlotLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGap(0, 0, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jpOneLayout = new javax.swing.GroupLayout(jpOne);
        jpOne.setLayout(jpOneLayout);
        jpOneLayout.setHorizontalGroup(
          jpOneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(jpOneLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jbFirst, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jpOnePlot, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
        );
        jpOneLayout.setVerticalGroup(
          jpOneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(jpOneLayout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jpOneLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addComponent(jpOnePlot, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
              .addGroup(jpOneLayout.createSequentialGroup()
                .addComponent(jbFirst, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 143, Short.MAX_VALUE)))
            .addContainerGap())
        );

        jtpBot.addTab("One", jpOne);

        jpTwo.setBackground(new java.awt.Color(191, 0, 191));

        jbTwo.setText("Two");
        jbTwo.setMaximumSize(new java.awt.Dimension(70, 23));
        jbTwo.setMinimumSize(new java.awt.Dimension(70, 23));
        jbTwo.setPreferredSize(new java.awt.Dimension(70, 23));
        jbTwo.addActionListener(new java.awt.event.ActionListener() {
          public void actionPerformed(java.awt.event.ActionEvent evt) {
            jbTwoActionPerformed(evt);
          }
        });

        jpTwoPlot.setBackground(new java.awt.Color(191, 191, 191));
        jpTwoPlot.setBorder(javax.swing.BorderFactory.createEtchedBorder());

        javax.swing.GroupLayout jpTwoPlotLayout = new javax.swing.GroupLayout(jpTwoPlot);
        jpTwoPlot.setLayout(jpTwoPlotLayout);
        jpTwoPlotLayout.setHorizontalGroup(
          jpTwoPlotLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGap(0, 291, Short.MAX_VALUE)
        );
        jpTwoPlotLayout.setVerticalGroup(
          jpTwoPlotLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGap(0, 0, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jpTwoLayout = new javax.swing.GroupLayout(jpTwo);
        jpTwo.setLayout(jpTwoLayout);
        jpTwoLayout.setHorizontalGroup(
          jpTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(jpTwoLayout.createSequentialGroup()
            .addContainerGap()
            .addComponent(jbTwo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jpTwoPlot, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addContainerGap())
        );
        jpTwoLayout.setVerticalGroup(
          jpTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(jpTwoLayout.createSequentialGroup()
            .addContainerGap()
            .addGroup(jpTwoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addComponent(jpTwoPlot, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
              .addGroup(jpTwoLayout.createSequentialGroup()
                .addComponent(jbTwo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 143, Short.MAX_VALUE)))
            .addContainerGap())
        );

        jtpBot.addTab("Two", jpTwo);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addComponent(jtpBot)
        );
        layout.setVerticalGroup(
          layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
          .addGroup(layout.createSequentialGroup()
            .addGap(69, 69, 69)
            .addComponent(jtpBot)
            .addContainerGap())
        );

        pack();
      }// </editor-fold>                        

      private void formComponentResized(java.awt.event.ComponentEvent evt) {
        if (jtpBot.getSelectedIndex() == jtpBot.indexOfTab("One")) {
          if (jbFirst.isEnabled()) {
            jbFirstActionPerformed(null);
          }
        }
        if (jtpBot.getSelectedIndex() == jtpBot.indexOfTab("Two")) {
          if (jbTwo.isEnabled()) {
            jbTwoActionPerformed(null);
          }
        }
      }                                     

      private void jbFirstActionPerformed(java.awt.event.ActionEvent evt) {
        try {
          System.out.println("jbFirstActionPerformed");
          final JPanel jpOneNew = new JPanel();
          int c = 32+(int)(208*Math.random());
          jpOneNew.setBackground(new Color(c,0,0));
          Runnable plotOne = new Runnable() {
            public void run() {
              try {
                Thread.sleep((int)(500*Math.random()));  //simulate Time Proccesing
                insertPanelInPanel(jpOnePlot, jpOneNew);
              } catch (Exception ioe) {
                System.out.println("-insertPanelInPanel(jpOnePlot, jpOneNew):"+ioe.toString());
              }
            }
          };
          if (!isRunningPlotThreads()) {
            thrdOne = new Thread(plotOne);
            thrdOne.start();
          }
        } catch (Exception ioe) {
          System.out.println("jpOneNew:"+ioe.toString());
        }
      }                                       

      private void jbTwoActionPerformed(java.awt.event.ActionEvent evt) {
        try {
          System.out.println("jbTwoActionPerformed");
          final JPanel jpTwoNew = new JPanel();
          int c = 32+(int)(208*Math.random());
          jpTwoNew.setBackground(new Color(0,c,0));
          Runnable plotTwo = new Runnable() {
            public void run() {
              try {
                Thread.sleep((int)(500*Math.random()));  //simulate Time Proccesing
                insertPanelInPanel(jpTwoPlot, jpTwoNew);
              } catch (Exception ioe) {
                System.out.println("-insertPanelInPanel(jpTwoPlot, jpTwoNew):"+ioe.toString());
              }
            }
          };
          if (!isRunningPlotThreads()) {
            thrdTwo = new Thread(plotTwo);
            thrdTwo.start();
          }
        } catch (Exception ioe) {
          System.out.println("jpTwoNew:"+ioe.toString());
        }
      }                                     

        public static void main(String args[]) {
            //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
            try {
                for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                    if ("Nimbus".equals(info.getName())) {
                        javax.swing.UIManager.setLookAndFeel(info.getClassName());
                        break;
                    }
                }
            } catch (ClassNotFoundException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            } catch (javax.swing.UnsupportedLookAndFeelException ex) {
                java.util.logging.Logger.getLogger(NewJFrame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
            }
            //</editor-fold>

            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    new NewJFrame().setVisible(true);
                }
            });
        }

        boolean bCanIuseOne = false;
        boolean bCanIuseTwo = false;
        boolean bThreadFree = true;
        boolean bMouseFree = false;

      private javax.swing.JButton jbFirst;
      private javax.swing.JButton jbTwo;
      private javax.swing.JPanel jpOne;
      private javax.swing.JPanel jpOnePlot;
      private javax.swing.JPanel jpTwo;
      private javax.swing.JPanel jpTwoPlot;
      private javax.swing.JTabbedPane jtpBot;         
    }

输出

    jbFirstActionPerformed
    jbFirstActionPerformed
    jbTwoActionPerformed
    jbTwoActionPerformed

    Exception in thread "AWT-EventQueue-0" java.lang.IllegalStateException: javax.swing.JPanel[,0,0,0x0,invalid,layout=java.awt.FlowLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.synth.SynthBorder@fa9981,flags=9,maximumSize=,minimumSize=,preferredSize=] is not attached to a horizontal group
        at javax.swing.GroupLayout.checkComponents(GroupLayout.java:1086)
        at javax.swing.GroupLayout.prepare(GroupLayout.java:1040)
        at javax.swing.GroupLayout.minimumLayoutSize(GroupLayout.java:896)
        at java.awt.Container.minimumSize(Container.java:1846)
        at java.awt.Container.getMinimumSize(Container.java:1830)
        at javax.swing.JComponent.getMinimumSize(JComponent.java:1746)
        at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedMinimumSize(GroupLayout.java:3008)
        at javax.swing.GroupLayout$ComponentSpring.calculateMinimumSize(GroupLayout.java:2972)
        at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1336)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1636)
        at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1627)
        at javax.swing.GroupLayout$Group.calculateMinimumSize(GroupLayout.java:1598)
        at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1336)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1636)
        at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1622)
        at javax.swing.GroupLayout$Group.calculateMinimumSize(GroupLayout.java:1598)
        at javax.swing.GroupLayout$ParallelGroup.calculateMinimumSize(GroupLayout.java:2569)
        at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1336)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1636)
        at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1622)
        at javax.swing.GroupLayout$Group.calculateMinimumSize(GroupLayout.java:1598)
        at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1336)
        at javax.swing.GroupLayout.calculateAutopadding(GroupLayout.java:1068)
        at javax.swing.GroupLayout.prepare(GroupLayout.java:1058)
        at javax.swing.GroupLayout.minimumLayoutSize(GroupLayout.java:896)
        at java.awt.Container.minimumSize(Container.java:1846)
        at java.awt.Container.getMinimumSize(Container.java:1830)
        at javax.swing.JComponent.getMinimumSize(JComponent.java:1746)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.calculateSize(BasicTabbedPaneUI.java:2303)
        at javax.swing.plaf.basic.BasicTabbedPaneUI$TabbedPaneLayout.minimumLayoutSize(BasicTabbedPaneUI.java:2282jbTwoActionPerformed
    )
        at java.awt.Container.minimumSize(Container.java:1846)
    jbTwoActionPerformed
        at java.awt.Container.getMinimumSize(Container.java:1830)
        at javax.swing.JComponent.getMinimumSize(JComponent.java:1746)
    jbTwoActionPerformed
        at javax.swing.GroupLayout$ComponentSpring.calculateNonlinkedMinimumSize(GroupLayout.java:3008)
        at javax.swing.GroupLayout$ComponentSpring.calculateMinimumSize(GroupLayout.java:2972)
        at javax.swing.GroupLayout$Spring.getMinimumSize(GroupLayout.java:1336)
        at javax.swing.GroupLayout$ComponentSpring.calculatePreferredSize(GroupLayout.java:2979)
        at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1346)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1638)
        at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1622)
        at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1602)
        at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1346)
        at javax.swing.GroupLayout$Group.getSpringSize(GroupLayout.java:1638)
        at javax.swing.GroupLayout$Group.calculateSize(GroupLayout.java:1622)
        at javax.swing.GroupLayout$Group.calculatePreferredSize(GroupLayout.java:1602)
        at javax.swing.GroupLayout$Spring.getPreferredSize(GroupLayout.java:1346)
        at javax.swing.GroupLayout$SequentialGroup.setValidSize(GroupLayout.java:2017)
        at javax.swing.GroupLayout$Group.setSize(GroupLayout.java:1587jbTwoActionPerformed
    )
        at javax.swing.GroupLayout.calculateAutopadding(GroupLayout.java:1079)
        at javax.swing.GroupLayout.layoutContainer(GroupLayout.java:918)
        at java.awt.Container.layout(Container.java:1508)
        at java.awt.Container.doLayout(Container.java:1497)
        at java.awt.Container.validateTree(Container.java:1693jbTwoActionPerformed
    )
        at java.awt.Container.validateTree(Container.java:1702)
        at java.awt.Container.validateTree(Container.java:1702)
        at java.awt.Container.validateTree(Container.java:1702)
        at java.awt.Container.validate(Container.java:1628)
        at java.awt.Window.dispatchEventImpl(Window.java:2748)
        at java.awt.Component.dispatchEvent(Component.java:4703)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
        at java.awt.EventQueue.access$500(EventQueue.java:97)
        at java.awt.EventQueue$3.run(EventQueue.java:709)
        at java.awt.EventQueue$3.run(EventQueue.java:703)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
        at java.awt.EventQueue$4.run(EventQueue.java:731)
        at java.awt.EventQueue$4.run(EventQueue.java:729)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
    jbTwoActionPerformed

问题

  1. 怎么了?

  2. 如何防止抛出异常?

  3. 如何捕获此类异常?

最佳答案

试试这个!!!

private void insertPanelInPanel(JPanel jpContainer, JPanel jpContained) {
  jpContainer.removeAll();
  jpContainer.setLayout(new java.awt.GridLayout(1,1));
  jpContainer.add(jpContained);
}

关于java - 使用线程 "AWT-EventQueue-0"java.lang.IllegalStateException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32303564/

相关文章:

java - 在不使用 JEditorPane 的情况下查看 Applet 内的 HTML

java - 为什么图像调整大小和翻转功能不起作用?

javascript - Node.js 多线程 : What are Worker threads and how does it work?

java - ArrayIndexOutOfBoundsException : -1 on JTable creation/tablechanged

java - drawString 在当前窗口的屏幕截图上打印字符串

java - 我的代码的 For 循环出错?

java - Spring Boot 使用 Gradle 找不到 spring-boot-starter-dao-jpa 包?

java - java中的多线程持久队列

用于大数据处理的python

java - 如何更改 JFileChooser 中的文本?