2016-06-23 6 views
1

Как приостановить все процессы за 5 секунд, а затем выполнить выполнение?

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; 
    } 

    } 
    } 

Я Тост и все эти вещи. Также системные часы. Но это не работает для меня. Мне нужно перерыв в 5 секунд, прежде чем менять цвет кнопки изображения на красный. Я новичок в программировании. Так объясните на простом языке. Заранее спасибо .....

+0

Вы пробовали 'Thread.sleep (5000);'? Или вы действительно хотите остановить ** ВСЕ ** процессы? – ParkerHalo

+1

К счастью, остановить все процессы невозможно. – Krythic

+0

@parkerHalo да, я попробовал его. Но это не я ищу. Да ... я действительно хочу остановить ВСЕ процессы. Это означает, что когда пользователь нажимает следующую кнопку, это не будет работать, пока не закроется 5 секунд. – Richter

ответ

1

Решение:

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

Thread.sleep() будет приостановить свою программу в течение определенного периода времени. Рекомендуются, чтобы вы поймать исключение и обработать его должным образом, как это может создать больше проблем для вашей программы ...

Информации о Прерванном Исключении в этом повторить вопрос:

When does Java's Thread.sleep throw InterruptedException?

другими Решение, если Thread.sleep() является проблема ..

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(); 

Что вы можете сделать, это реализовать Swing Timer в рамках вашей программы. Вы создадите объект Timer для запуска действия каждые 1000 миллисекунд. Имейте переменную в таймере, которая увеличивается каждую секунду (в основном каждый раз при запуске действия) и выполняет что-то, когда эта переменная равна пяти. Вы также можете просто установить таймер на 5000 миллисекунд вместо 1000 в качестве параметра ... Точка, через определенное время/сделать что-то.

+0

Да, .... Я пробовал это раньше, он работает. Но проблема в том, что этот код работает немного раньше. Это означает, что в нашем примере (в данном вопросе) оба цвета отображаются через 5 секунд. Нам нужно отобразить зеленое изображение, а затем приостановить на 5 секунд, а затем отобразить красный цвет. – Richter

+0

@Richter Я думаю, что таймер качелей будет работать ... Отредактированное решение – DarkV1

0

Вы выполняете всю работу в основном потоке, поэтому вы не можете использовать Thread.sleep(), потому что приложение будет зависать. Попытайтесь использовать Handler.postDelayed() вместо этого в основном потоке или новом потоке, а затем выполните весь цвет смены материала или что-то еще. Другое (более сложное мощное) решение - используйте rx library (Timer)

 Смежные вопросы

  • Нет связанных вопросов^_^