0

タイマーを 0 に設定して経過時間を表示したい。このコードでは、自動的に 1:00 に開始されます。しかし、私は0:00に自動的に開始したいです。これが私のコードで、1:00 から始まります。このコードを 0:00 に開始するタイマーに設定するにはどうすればよいですか?

class TimeTyping extends JPanel implements Runnable{

    private JLabel timelabel;
    private int sec=1,min=1,testtime=0;
    private String str;
    private boolean timefree;
    protected Thread t1 ;

    TimeTyping(int time){

        super();
        setLayout(new FlowLayout());
        setVisible(true);
        setSize(300,300);


        if(time<=5){
            str=""+time+":00";
            timelabel=new JLabel(str);
            timefree=false;
        }
        else{
            timelabel=new JLabel("Free Time Test");
            timefree=true;
        }
        add(timelabel);

        t1 = new Thread(this);
        /*t1.start();
        t1.suspend();*/
    }

    public void run(){
        try{

            if(timefree){
                testtime++;
                run();
                System.out.println("free");
            }
            else{
                //taking min and sec form label
                synchronized(this) {
                    if(sec==0){
                        sec=60;
                        min--;
                    }
                    sec++;
                    testtime++;
                    if(sec>9){
                        timelabel.setText(min+":"+sec);
                    }
                    else{
                        timelabel.setText(min+":0"+sec);
                    }
                }
                Thread.sleep(1000);
                //if test is not over 
                if(min>0 || sec>0){
                    run();  
                }
            }

        }
        catch(Exception e){}

    }

    //return total test time taken in sec
    public int getTestTime(){

        return testtime;

    }

    //return minutes of test time left 
    public int getMin(){
        return min;
    }


    //return sec of test time left
    public int getSec(){
        return sec;
    }

    /*public static void main(String args[]){

        TypingTime t= new TypingTime();

    }*/


}
4

2 に答える 2

0

4 行目にmin = 1andを設定するのはなぜですか? sec = 1それが、タイマーが 01:00 に開始する理由のように思えます。また、コンストラクターをどのように呼び出しますか? 引数なしで呼び出すと、TypingTime t= new TypingTime();すべての設定が無視されます。

于 2011-11-24T12:19:54.600 に答える
0

と を設定minsec = 1ます。それはあなたの問題ですが、それらの値をに変更する0と、 min = から始まります-1booleanコードに(例: ) を追加initします。if(sec==0){そのため、プログラムが開始されたばかりかどうかを行で確認できます。私の言いたいことを理解していただければ幸いです。:-)

...
private boolean init = false;
...
if (sec == 0 && init) {
    sec = 60;
    min--;
} else if (!init) {
    init = true;
}
... 

ところで、 javax.swing.Timerを使用する必要があると思います。

于 2011-11-24T12:23:32.090 に答える