java таймер по григорианскому календарю

У меня есть эта Java-программа, которая вычисляет время, которое потребовалось человеку, чтобы ответить на диалоговое окно подтверждения. Но кажется, что и время 1, и время 2 получают одинаковое значение. Что я здесь сделал не так:

import javax.swing.JOptionPane;
    import java.util.*;

    public class DialogTimer{
        public static void main(String args[]){
            int time1, time2, milli1, milli2, sec1, sec2, timeDifference;
            final int MILLISECSINSECOND =1000;

            JOptionPane.showConfirmDialog(null, "Is stealing ever justified? ");

            GregorianCalendar before=new GregorianCalendar();
                GregorianCalendar after= new GregorianCalendar();


            milli1=before.get(GregorianCalendar.MILLISECOND);
            milli2=after.get(GregorianCalendar.MILLISECOND);


            sec1=before.get(GregorianCalendar.SECOND);
            sec2=after.get(GregorianCalendar.SECOND);

            time1=MILLISECSINSECOND * sec1 + milli1;
            time2=MILLISECSINSECOND * sec2 + milli2;


            //timeDifference=time1 - time2;
            System.out.println(time1);
            System.out.println(time2);


            //JOptionPane.showMessageDialog(null, "It took " + (time1 - time2) + " milliseconds for you to answer");


        }

    }

person Wern Ancheta    schedule 17.01.2011    source источник


Ответы (2)


Почему бы вам не использовать System.currentTimeMillis() напрямую? например:

long startAt = System.currentTimeMillis();
... your code ...
long elapsed = System.currentTimeMillis() - startAt;
person CodegistCRest    schedule 17.01.2011

CodegistCRest прав. но в любом случае в вашем случае вы получите одинаковые или почти одинаковые значения. Современные компьютеры очень быстрые, но разрешение по времени, которое вы получаете из календаря и currentTimeMillis(), составляет миллисекунды. Компьютер вызывает всю вашу программу менее чем за 1 мс.

В реальной жизни вам все это не нужно. Ты должен сказать:

long before = System.currentTimeMillis();

когда вы показываете диалог и

long after = System.currentTimeMillis();

как часть действия, которое вызывается, когда пользователь нажимает кнопку. Тогда скажи

time = after - before;

person AlexR    schedule 17.01.2011