2014-11-01 11 views
0

Почему метод getTime() возвращает null значение? Возврат ненулевого значения, когда time объявлен как переменная static, но тогда мы не можем создавать объекты с разным временем.Как получить время в следующем фрагменте кода

package timecounter; 

import java.util.Timer; 
import java.util.TimerTask; 

public class Timerx extends TimerTask { 

    int H, M, S; 
    Timer timer; 
    String time; 

    @Override 
    public void run() { 
     S++; 
     if (S >= 60) { 
      M++; 
      S = 0; 
      if (M >= 60) { 
       H++; 
       M = 0; 
       if (H >= 12) { 
        H = 0; 
       } 
      } 
     } 
     this.time = String.format("%2d:%2d:%2d", H, M, S); 
     System.out.print("Running"); 
    } 
    public void start() { 
     timer.schedule(new Timerx(), 1000, 1000); 
    } 
    public Timerx() { 
     this.timer = new Timer(); 
    } 
    public String getTime() {// here return null value 
     return time; 
    } 

} 
+1

Что вы подразумеваете под «его возвратом, когда« переменная статического времени строки »? Я предполагаю, что вы вызываете 'getTime()' на новый экземпляр, а не тот, где таймер действительно выстрелил. –

+0

'start()' похоже, планирует «новый Timerx()», а не 'this'. Полагаю, это проблема. –

+0

На самом деле я не могу получить время, чтобы вернуть значение null. когда я изменил переменную времени на строку своей работы, но timeCounter в каждом экземпляре вернется в то же время –

ответ

0

Заменить:

timer.schedule(new Timerx(), 1000, 1000); 

С:

timer.schedule(this, 1000, 1000); 

Однако этот мир кода не очень приятно. Вы хотите иметь несколько счетчиков таймера, но каждая программа timertask имеет свой собственный таймер. Каждому таймеру нужен поток для своих сервисов. Лучше использовать несколько таймерных задач с одним таймером.

E.g. заменить

Timer timer; 

с:

static Timer timer = new Timer(); 

или извлечь это отдельный класс одноплодной например, CounterService.

+0

Большое спасибо. я попробую –

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