2012-07-19 11 views
0

Im пытается сделать секундомер в java, который выглядит так 00:00:00, который начинает отсчет, как только нажата кнопка. По какой-то причине это не сработает, но я уверен, что чего-то не хватает.Секундомер в java

for (;;) 
    { 
    if (pause == false) 
      { 
       sec++; 

       if (sec == 60) 
       { 
        sec = 0; 
        mins++; 
       } 
        if (mins == 60) 
        { 
         mins = 0; 
         hrs++; 
        } 

       String seconds = Integer.toString(sec); 
       String minutes = Integer.toString(mins); 
       String hours = Integer.toString(hrs); 

       if (sec <= 9) 
       { 
        seconds = "0" + Integer.toString(sec); 
       } 
       if (mins <= 9) 
       { 
        minutes = "0" + Integer.toString(mins); 
       } 
       if (hrs <= 9) 
       { 
        hours = "0" + Integer.toString(hrs); 
       } 

       jLabel3.setText(hours + ":" + minutes + ":" + seconds); 
      } 
+5

Что не работает? –

+2

Или, что еще важнее, что делать? – gobernador

+4

поэтому каждый для итерации = 1 сек? –

ответ

0

Первое, что итерация выполняется гораздо меньше секунды, поэтому у вас будет «плохое время».

Возможно, вам понадобится использовать метод System.currentTimeMillis() для точной вашей программы, библиотеки, которые лучше знают, как обращаться с time, или даже, возможно, простой сон 1 секунды в вашей программе (но это будет не очень точно) ,

+0

Это ответ ...? – NominSim

+2

ну, это заставило меня немного поработать – kritzikratzi

0

Предполагаю, что (поскольку вы не предлагали никаких доказательств, чтобы предлагать иное), что это просто выполняется «как есть» из Главного класса. Вы заметите, что ваши номера растут очень быстро и совсем не напоминают секундомер. Используйте Thread.sleep(1000), так что между каждой итерацией проходит секунда.

EDIT: Если ваша кнопка паузы не работает, я предполагаю, что вы используете Swing и что кнопка висит на потоке событий и ничего не делает. Простое исправление состоит в том, чтобы сделать pause -> static и использовать swing-worker для выполнения метода, который пытается инициировать кнопка паузы.

3

Я не уверен, в чем проблема, но этот блок в цикле for(;;) определенно смертелен.

попробовать что-то вроде этого вместо петли for:

// "1000" here means 1000 milliseconds (1sec). 
new Timer(1000, new ActionListener(){ 
    public void actionPerformed(ActionEvent e){ 
    if(pause == false){ 
     // ... code from above with the for(;;) 
    } 
    } 
}.start(); 

Вы можете прочитать documentation for the timer class для получения дополнительной информации.

+1

Вы можете заменить 'pause == false' на'! Pause' –

+0

Я действительно нахожу '' 'pause == false''' лучше читать, но, конечно ... оба работают просто отлично :) – kritzikratzi

+0

@NominSim добавил ссылку, но это единственный таймер конструктора. – kritzikratzi

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