2016-12-19 19 views
0

この類似したエラーで以前の問題を見ていましたが、正しく宣言されていない変数が見つかりません。私は現在、私のプログラムには4つのオプションしかありません。問題は、最初のイメージが表示され、エラーがあることです。私はこのコードを数回書き直そうとしましたが、このエラーを回避することはできません。他の質問やコードは役に立たないようです。エラーが発生し続けるスレッド「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'を呼び出すべきではありませんし、スレッド上でデッドロックを引き起こす可能性があります(そうした場合、スレッドオブジェクト上でモニターを保持する必要があります) ''スレッド '!!! **。あなたはたぶん代わりに「睡眠」を探していました(それはまだ間違ったツールです)。 –

+0

私はそれを見て、私はもともとthread.sleepを使用していましたが、それが私のために働いていないのを待っていました。 – CeaganP

答えて

1

アニメーションにforループとThread.wait(...)を使用しないでください。

アニメーションの場合は、Swing Timerを使用してください。

すべてのSwingの基本については、Swingチュートリアルへのリンクを参考にしてください。

関連する問題