2016-06-23 2 views
1

Comment mettre en pause tous les processus pendant 5 secondes puis suivre l'exécution?

public class Main2Activity extends AppCompatActivity { 
int square5 = 0; 
int flag = 1; 
int userclick5 = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main2); 

    //here i set some click listeners. one example is as follows: 
    ImageButton image_button1 = (ImageButton) findViewById(R.id.image_button1); 
    image_button1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View view) { 
      goToIB(); 
     } 
    }); 
} 
//click listener call this function. This function set the color of image button as green. 
//Then it calls the function goTofirst3cpu() 
    private int goToIB() { 
    ImageButton imageButton5 = (ImageButton) findViewById(R.id.image_button5); 
    if (imageButton5.isPressed() & square5 == 0) { 
     { 
      imageButton5.setImageResource(R.color.green_color); 
      flag = flag + 1; 
      square5 = square5 + 1; 
      userclick5 = userclick5 + 1; 
      goTofirst3cpu(); 
      return square5; 
     } 
    } 
    return 0; 
    } 
    //This function shows red color in image button 
    private void goTofirst3cpu() { 
    ImageButton imageButton5 = (ImageButton) findViewById(R.id.image_button5); 

    if (square5 == 0) { 

     //HERE IS WHAT I NEED TO DO SOMETHING 
     //when i do something, there will be a gap of 5 seconds 
     //before changing imagebutton's color from green to red. 
     //????????? WHAT I WILL DO HERE. ?????? 

     imageButton5.setImageResource(R.color.red_color); 
     square5 = square5 + 1; 
    } 

    } 
    } 

j'ai utilisé Toast et tout ce genre de choses. Aussi horloge système. Mais ces choses ne fonctionnent pas pour moi. J'ai besoin d'une pause de 5 secondes avant de changer la couleur du bouton image en rouge. Je suis un débutant en programmation. Alors expliquez dans un langage simple. Merci à l'avance .....

+0

Avez-vous essayé 'Thread.sleep (5000);'? Ou voulez-vous vraiment arrêter ** TOUS ** les processus ?? – ParkerHalo

+1

Heureusement, il est impossible d'arrêter TOUS les processus. – Krythic

+0

@parkerHalo oui, je l'ai essayé.Mais ce n'est pas je suis à la recherche. Ouais .. je veux vraiment arrêter tous les processus. Ce qui signifie que lorsque l'utilisateur appuie sur le bouton suivant, il ne sera pas travailler, jusqu'à 5 secondes plus de. – Richter

Répondre

1

Solution:

try 
{ 
    Thread.sleep(//milliseconds); 
} 
catch(InterruptedException e) 
{ 
    //handles exception 
} 

Thread.sleep() va mettre en pause votre programme pendant un certain laps de temps. Il est recommandé que vous Intercepter l'exception et de gérer correctement car il peut créer plus de problèmes pour votre programme ...

Infos sur l'exception Interrupted Ici, dans cette question répétée:

When does Java's Thread.sleep throw InterruptedException?

Une autre solution si Thread.sleep() est un problème ..

int delay = 1000; //milliseconds 
    ActionListener taskPerformer = new ActionListener() { 
     int x = 0; 
    public void actionPerformed(ActionEvent evt) { 

      if(x == 5) 
      { 
       //change color of button... 
      } 

      x++; 
     } 
    }; 
    new Timer(delay, taskPerformer).start(); 

Ce que vous pouvez faire est de mettre en œuvre un Swing Timer au sein de votre programme. Vous devez créer un objet Timer pour déclencher une action toutes les 1000 millisecondes. Avoir une variable dans le temporisateur qui incrémente chaque seconde (essentiellement chaque fois que l'action est déclenchée) et faire quelque chose lorsque cette variable est égale à cinq. Vous pouvez également régler le temporisateur à 5000 millisecondes au lieu de 1000 comme paramètre ... Point est, après un certain laps de temps/faire quelque chose.

+0

ouais, .... J'ai essayé cela plus tôt, ça marche. Mais le problème est que ce code fonctionne un peu plus tôt. Ce qui signifie, dans notre exemple (dans la question donnée) les deux couleurs affichées après 5 secondes. Nous devons afficher l'image verte puis faire une pause pendant 5 secondes puis afficher le rouge. – Richter

+0

@Richter je pense que le minuteur de swing fonctionnera ... Solution éditée – DarkV1

0

Vous faites tout le travail dans le thread principal, donc vous ne pouvez pas utiliser Thread.sleep(), car l'application va se bloquer. Essayez d'utiliser Handler.postDelayed() à la place sur le thread principal ou le nouveau thread, puis faites tout le stuff-changez de couleur ou autre chose. Une autre solution (plus complexe et plus puissante) - Utiliser la bibliothèque rx (Timer)