2016-12-19 1 views
0

이 비슷한 오류가 발생하여 이전 문제가보고되었지만 제대로 선언되지 않았거나 사용되지 않은 변수를 찾을 수 없습니다. 현재 내 프로그램에는 네 가지 옵션 만 있으며 문제는 첫 번째 이미지가 표시되고 오류가 있다는 것입니다. 이 코드를 두 번 다시 작성하려고했지만이 오류를 피할 수는없는 것 같습니다. 다른 질문이나 코드는 도움이되지 않습니다.오류가 계속 발생 "AWT-EventQueue-0"예외 java.lang.IllegalMonitorStateException

개인 무효 btnStartActionPerformed (java.awt.event.ActionEvent의의 EVT) {
있는 waittime = Integer.valueOf (lblWaitput.getText());

if (waitTime <= 0){ 
     waitTime = 60; 
    } 

    // METHOD TO CLEAR UP DEBRIS AND TO SPLIT INTO ARRAY 
    temp = txtList.getText(); 
    temp = temp.toLowerCase(); 
    selects = temp.split(" "); 
    for (i = 0; i < selects.length; i++){ //CLEANS UP VARIABLES FOR A PROPER PATH TO GRAB IMAGES FROM 
     selects[i] = "/SlideShow/" + selects[i] + ".jpg"; 
     selectcount++; 
    }  // END OF CLEANING 

    //START OF SLIDE SHOW 
    for (x = 0; x <= selectcount; x++){//THE LOOP THAT CYCLES THROUGH THE IMAGES 
     lblDisplay.setIcon(null); 
     System.out.println(selects[x]); //THE VARIABLE WHICH THE IMAGE IS IN 
     lblDisplay.setIcon(new javax.swing.ImageIcon(getClass().getResource(selects[x]))); //DISPLAYING IMAGE 
     try { 
      Thread.currentThread().wait(waitTime*10); 
     } 
     catch(InterruptedException ie){ 
     } 

    } 
    // END OF SLIDES NOTHING FURTHER 
}   

다음은 전체 코드입니다.

/* 
* To change this template, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package SlideShow; 
    import javax.swing.*; 
/** 
* 
* @author palaceag196 
*/ 
public class MainSlides extends javax.swing.JFrame { 

    String[] options = {"Soccer","Basketball","Football","Hockey","Ravioli","Banana","Pizza","Hotdog","Cat","Dog","Bird","Hamster"}; 
    String temp; 
    String[] selects; 
    int selectcount; 
    int i, x; 
    int waitTime; 

    //    new ImageIcon(getClass().getResource(temp)) 
    /** 
    * Creates new form MainSlides 
    */ 
    public MainSlides() { 
     initComponents(); 
    } 

    /** 
    * This method is called from within the constructor to initialize the form. 
    * WARNING: Do NOT modify this code. The content of this method is always 
    * regenerated by the Form Editor. 
    */ 
    @SuppressWarnings("unchecked") 
    // <editor-fold defaultstate="collapsed" desc="Generated Code"> 
    private void initComponents() { 

     jScrollPane1 = new javax.swing.JScrollPane(); 
     listSelect = new javax.swing.JList(); 
     jScrollPane2 = new javax.swing.JScrollPane(); 
     txtList = new javax.swing.JTextArea(); 
     lblWaitput = new javax.swing.JTextField(); 
     jLabel1 = new javax.swing.JLabel(); 
     btnStart = new javax.swing.JButton(); 
     lblDisplay = new javax.swing.JLabel(); 

     setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); 

     listSelect.setModel(new javax.swing.AbstractListModel() { 
      String[] strings = { "Soccer", "Basketball", "Football", "Hockey",  "Ravioli", "Banana", "Pizza", "Hotdog", "Cat", "Dog", "Bird", "Hamster" }; 
      public int getSize() { return strings.length; } 
      public Object getElementAt(int i) { return strings[i]; } 
     }); 
     listSelect.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       listSelectMouseClicked(evt); 
      } 
     }); 
     jScrollPane1.setViewportView(listSelect); 

     txtList.setColumns(12); 
     txtList.setFont(new java.awt.Font("Monospaced", 0, 12)); // NOI18N 
     txtList.setLineWrap(true); 
     txtList.setRows(12); 
     txtList.setAutoscrolls(false); 
     txtList.setFocusable(false); 
     jScrollPane2.setViewportView(txtList); 

     lblWaitput.setText("60"); 
     lblWaitput.setToolTipText("Input wait time here."); 

     jLabel1.setText("Wait Time:"); 

     btnStart.setText("Start The Show"); 
     btnStart.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       btnStartActionPerformed(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(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) 
       .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
       .addComponent(jScrollPane2, 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) 
        .addGroup(layout.createSequentialGroup() 
         .addComponent(jLabel1) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(lblWaitput, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 88, Short.MAX_VALUE) 
         .addComponent(btnStart)) 
        .addComponent(lblDisplay, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
       .addContainerGap()) 
     ); 
     layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
      .addGroup(layout.createSequentialGroup() 
       .addContainerGap() 
       .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) 
        .addGroup(layout.createSequentialGroup() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) 
          .addComponent(lblWaitput, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) 
          .addComponent(jLabel1) 
          .addComponent(btnStart)) 
         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) 
         .addComponent(lblDisplay, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) 
        .addGroup(layout.createSequentialGroup() 
         .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) 
          .addComponent(jScrollPane1) 
          .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE)) 
         .addGap(0, 0, Short.MAX_VALUE))) 
       .addContainerGap()) 
     ); 

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

    private void listSelectMouseClicked(java.awt.event.MouseEvent evt) {           

     txtList.setText(txtList.getText() + options[listSelect.getSelectedIndex()] + " "); 

     // TODO add your handling code here: 
    }          

    private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {           
     waitTime = Integer.valueOf(lblWaitput.getText()); 

     if (waitTime <= 0){ 
      waitTime = 60; 
     } 

     // METHOD TO CLEAR UP DEBRIS AND TO SPLIT INTO ARRAY 
     temp = txtList.getText(); 
     temp = temp.toLowerCase(); 
     selects = temp.split(" "); 
     for (i = 0; i < selects.length; i++){ //CLEANS UP VARIABLES FOR A PROPER PATH TO GRAB IMAGES FROM 
      selects[i] = "/SlideShow/" + selects[i] + ".jpg"; 
      selectcount++; 
     }  // END OF CLEANING 

     //START OF SLIDE SHOW 
     for (x = 0; x <= selectcount; x++){//THE LOOP THAT CYCLES THROUGH THE IMAGES 
      lblDisplay.setIcon(null); 
      System.out.println(selects[x]); //THE VARIABLE WHICH THE IMAGE IS IN 
      lblDisplay.setIcon(new javax.swing.ImageIcon(getClass().getResource(selects[x]))); //DISPLAYING IMAGE 
      try { 
       Thread.currentThread().wait(waitTime*10); 
      } 
      catch(InterruptedException ie){ 
      } 

     } 
     // END OF SLIDES NOTHING FURTHER 

     // TODO add your handling code here: 
    }           

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String args[]) { 
     /* Set the Nimbus look and feel */ 
     //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> 
     /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. 
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */ 
     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(MainSlides.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (InstantiationException ex) { 
      java.util.logging.Logger.getLogger(MainSlides.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (IllegalAccessException ex) { 
      java.util.logging.Logger.getLogger(MainSlides.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } catch (javax.swing.UnsupportedLookAndFeelException ex) { 
      java.util.logging.Logger.getLogger(MainSlides.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); 
     } 
     //</editor-fold> 

     /* Create and display the form */ 
     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       new MainSlides().setVisible(true); 
      } 
     }); 
    } 
    // Variables declaration - do not modify 
    private javax.swing.JButton btnStart; 
    private javax.swing.JLabel jLabel1; 
    private javax.swing.JScrollPane jScrollPane1; 
    private javax.swing.JScrollPane jScrollPane2; 
    private javax.swing.JLabel lblDisplay; 
    private javax.swing.JTextField lblWaitput; 
    private javax.swing.JList listSelect; 
    private javax.swing.JTextArea txtList; 
    // End of variables declaration 
} 
+0

절대로 스레드에서'wait'를 호출해서는 안되며 스레드에서 교착 상태가 발생할 수 있습니다. 그렇다면 Thread 객체에서 모니터를 유지해야합니다. ** 다시 'wait ''스레드'!!! **. 대신 아마도 'sleep'을 찾고 있었을 것입니다. –

+0

나는 그것을 살펴볼 것인데, 원래 thread.sleep을 사용하고 있었지만 그것이 나를 위해 일하지 않은 후에 기다리기로했다. – CeaganP

답변

1

애니메이션에는 for 루프와 Thread.wait (...)를 사용하지 마십시오.

애니메이션의 경우 Swing Timer을 사용해야합니다.

모든 Swing 기본 사항에 대해 편리한 Swing 튜토리얼에 대한 링크를 유지하십시오.