2015-08-31 3 views
3

ПРИМЕЧАНИЕ: Я поставил полный пример кода, чтобы сделать его исполняемым любым пользователем; мой настоящий код очень длинный!Работа с потоками «AWT-EventQueue-0» java.lang.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,[email protected], 
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,[email protected], 
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,[email protected],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. Как я могу поймать такие исключения?

+0

* «Я положил полный пример кода, чтобы сделать его исполняемым любым пользователем, мой реальный код очень долго!» * +1 –

+0

_ + 1-_: Пожалуйста словами, я вас не понимаю ! – Anita

+0

+1 означает «Я оставил ваш вопрос». Upvotes могут использоваться, чтобы помочь указать «хороший вопрос». Поскольку вы включаете [mcve] (другим именем - но то же самое), я думал, что это стоит «+1». .. Я не знаю ответа, извините, но надеюсь, что тот, кто это сделает, скоро это увидит. –

ответ

2

Попробуйте это!

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

Ваш код Он работает! – Anita