2011-04-28 2 views
0

Ce code jSlider provoque l'application à accrocher.Code jSlider provoque l'application pour accrocher

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { 
    // TODO add your handling code here:    
     try { 
       for(int i=0;i<100;i++) 
       { 
      jSlider1.setValue(i); 
      Thread.sleep(3000); 
       } 
     } catch (InterruptedException ex) { 
      Logger.getLogger(AsdView.class.getName()).log(Level.SEVERE, null, ex); 
     }    
} 

merci les gars, je mets à jour la réponse

Timer time = new Timer(100, new ActionListener() { 
        int percent = 0; 

       @Override 
       public void actionPerformed(ActionEvent e) { 
         percent++; 
         if (percent>100) 
           percent = 0; 

        jSlider1.setValue((int)(100*(percent/600.0))); 
       } 
     }); 
     time.start(); 
+1

Il est orthographié "pourquoi", pas "y". S'il vous plaît pas l33t-sp34k sur SO. – EboMike

+0

Eh bien vous dormez pendant 3 secondes pour chaque itération de la boucle pour un total de 300 secondes (5 minutes!). Peut-être est-ce pourquoi il semble suspendu? – CoolBeans

+0

le curseur doit se déplacer vers la droite? comme une barre de progression? – ramya

Répondre

1

Je devine que vous essayez de faire une sorte de défilement lisse.

Ce code se bloque car le thread d'événement qui gère la fenêtre de peinture, de dimensionnement, etc ..., est gelé par l'exécution de Thread.sleep (3000), 100 fois.

Je recommande que vous utilisez un Swing timer qui change la barre de défilement peu à peu.

+0

vrai pouvez-vous me donner un exemple – ramya

+0

temps Timer = new Timer (100, new ActionListener() { int pour cent = 0; @Override public void actionPerformed (ActionEvent e) { pour cent ++; si (pour cent> 100) pour cent = 0; jSlider1.setValue ((int) (100 * (percent/600.0))); } }); time.start(); – ramya

0

je ne sais pas pourquoi vous mettez le sommeil pendant 3 secondes et que trop en boucle de 100 3 * 100 = 5 minutes il accrocherez jusqu'à 5 minutes supprimer Thread.sleep (3000);

cela fonctionnera très bien et ne se bloque pas

0

Quand vous dites votre application « bloque », cela signifie généralement que vous avez une sorte de blocage qui empêche vos fils de faire des progrès. Est-ce ce que vous observez dans votre programme? La façon dont il est actuellement écrit, le fil d'exécution actuel prendra au moins 300 secondes pour terminer. Ce travail est-il effectué sur le fil d'exécution principal? Si c'est le cas, vous pouvez envisager de créer un nouveau thread pour effectuer ce travail.