Timer

Интерфейс, диалоги, темы, стили, меню
Ответить
babygluk
Сообщения: 35
Зарегистрирован: 13 окт 2013, 17:02

Timer

Сообщение babygluk » 15 окт 2013, 21:16

Подскажите (можно и с примером) как сделать Таймер))
нужно что бы таймер работал - пока живет приложение.
но через каждые n - секунд, делал какие-то действия.
нашел вот такой код))) но javax не находит swing)

Код: Выделить всё

import javax.swing.Timer;
...
//Будет вызыватся каждую секунду
timer=new Timer(1000,new ActionListener(
                     public void actionPerformed(ActionEvent ev) {
                       System.out.println("WOW!");
                      }
                     ));
timer.start();

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Timer

Сообщение trew » 15 окт 2013, 21:25

[quote="babygluk"][/quote]

Код: Выделить всё

import java.util.Timer; 
import java.util.TimerTask; 
 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
 
public class MainActivity extends Activity { 
 
    public int time = 0; 
 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
         
        //Declare the timer 
        Timer t = new Timer(); 
        //Set the schedule function and rate 
        t.scheduleAtFixedRate(new TimerTask() { 
 
            @Override 
            public void run() { 
                runOnUiThread(new Runnable() { 
 
                    @Override 
                    public void run() { 
                        TextView tv = (TextView) findViewById(R.id.main_timer_text); 
                        tv.setText(String.valueOf(time)); 
                        time += 1; 
                    }                     
                }); 
            }             
        }, 0, 1000); 
    }     
} 
На TextView отображаем счетчик.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

vizort
Сообщения: 49
Зарегистрирован: 02 мар 2013, 22:43

Re: Timer

Сообщение vizort » 15 окт 2013, 22:32


babygluk
Сообщения: 35
Зарегистрирован: 13 окт 2013, 17:02

Re: Timer

Сообщение babygluk » 24 окт 2013, 22:11

Код: Выделить всё

		public void showTimer(int countdownMillis) {
			  if(timer != null) { timer.cancel(); }
			  timer = new CountDownTimer(countdownMillis, MILLIS_PER_SECOND) {
			  @Override
			  public void onTick(long millisUntilFinished) {
				 int second = (int) millisUntilFinished / MILLIS_PER_SECOND;
				 if (second >15 ) countdownDisplay.setTextColor(Color.GREEN);
				 if ((second < 15)&&( second > 7)) countdownDisplay.setTextColor(Color.YELLOW);
				 if ( second < 7) countdownDisplay.setTextColor(Color.RED);
			     countdownDisplay.setText(""+second);
			     if (TrueAnswer)
			     {
			    	 questionCount--;
			    	 count++;
			    	 text.setText("");
			    	 Toast.makeText(GameAskActivity.this, "TRUE", Toast.LENGTH_SHORT).show();
			    	 index = newIndex();
			    	 if(timer != null) {
			             timer.cancel();
			             timer = null;
			         }
			    	 start();
			     }
			     
			  }
			  @Override
			    public void onFinish() {
				 if(!TrueAnswer){
					 questionCount--;
					 text.setText("");
					 Toast.makeText(GameAskActivity.this, "Wrong", Toast.LENGTH_SHORT).show();
					 if(timer != null) {
			             timer.cancel();
			             timer = null;
			         }
					 start();
					  
				 }
			    }
			  }.start();
			}
Есть таймер.. проблема в том что он не вызывает метод
Тост вызывается, а start() нет..

Код: Выделить всё

	public void start(){
			if (this.questionCount >0){
				Toast.makeText(GameAskActivity.this, "Новый вопрос осталось вопросов"+questionCount, Toast.LENGTH_LONG).show();
				makeQuestion();//створюєм питання	
				
			 
		          showTimer(SECONDS_TO_COUNTDOWN * MILLIS_PER_SECOND);
		         
			}
			
			else
				finish();
		}

а когда я попадаю в if (TrueAnswer) то зависает програмка)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Timer

Сообщение klblk » 25 окт 2013, 07:05

что-то тут не так...
не вижу логики использования в onFinish функций start и cancel?

babygluk
Сообщения: 35
Зарегистрирован: 13 окт 2013, 17:02

Re: Timer

Сообщение babygluk » 25 окт 2013, 07:34

возможно)
Идея была такая
Таймер 20 секунд
Если я отвечаю на вопрос правильно TrueAnswer = True
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
Если время закончилось и я не ответил то
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
И условие где то поставить, после последнего вопроса, закончить работу таймера

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Timer

Сообщение klblk » 26 окт 2013, 06:15

а блин, start() это не тот старт) ну в любом случае в функции onFinish() не нужно делать timer.cancel(), вашу функцию start() наверное стоит применять както типа MyActivity.this.start().

В onTick() наверное лучше не делать timer.cancel и timer = null, а лучше это сделать там где вы получаете TrueAnswer (кстати не пользовался этим классом, если мы делам cancel то функция onFinish не срабатывает? если срабатывает, то в onTick не нужно "ваш" start делать, ведь он есть в финише, ну и не уверен что timer = null хорошая идея)

Аватара пользователя
knight
Сообщения: 44
Зарегистрирован: 21 сен 2012, 09:25

Re: Timer

Сообщение knight » 26 окт 2013, 10:16

Timer timer = new Timer();

TimerTask task = new TimerTask()
{
public void run()
{
// тут делаем свистопляски нам нужные
}
};
timer.schedule(task, 0, 60000); // запускаем таймер, теперь таймер таск будет вызываться каждую минуту

timer.cancel(); //остановить таймер

Аватара пользователя
knight
Сообщения: 44
Зарегистрирован: 21 сен 2012, 09:25

Re: Timer

Сообщение knight » 26 окт 2013, 10:28

babygluk писал(а):возможно)
Идея была такая
Таймер 20 секунд
Если я отвечаю на вопрос правильно TrueAnswer = True
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
Если время закончилось и я не ответил то
{
плюсонуть\откинуть счетчики
Сгенерировать новый вопрос
и заново запустить таймер.
}
И условие где то поставить, после последнего вопроса, закончить работу таймера
int colvopros=10;
boolean TrueAnswer = false;
int ozenka=0;

Timer timer = new Timer();

TimerTask task = new TimerTask()
{
public void run()
{

if(TrueAnswer==true)
{
colvopros--;
ozenka+=5;
}
else
{
colvopros--;
}
if(colvopros==-1)
{
timer.cancel();
}

}
};
timer.schedule(task, 20000, 20000); // запускаем таймер, теперь таймер таск будет вызываться каждую минуту


чет вроде этого, дальше самому можно привязать к UI

Ответить