使用计时器为javafx制作秒表

时间:2014-05-05 11:10:18

标签: java javafx timer

我实际上有一个视频流应用程序,我想显示这两个人与彼此聊天的时间。我已经使用了java.util类的Timer和TimerTask,但它给出了错误,因为"不在FX应用程序线程上#34;这意味着我不能使用swing线程将setText设置为java fx组件。这是我到目前为止所尝试的: -

int timerx=0    //global variable



private void timer(){
/*SHOWING TIME PASSED*/

    int x=0;

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {

        @Override
        public void run() {

            System.out.println("working");

            setTime();


        }

    };
            timer.schedule(timerTask, 50, 50);

}

将javafx标签更新为: -

    private void setTime(){
    timerx = timerx +1;
    Platform.runLater(new Runnable(){
        public void run(){
            time.setText(String.valueOf((timerx)));
            System.out.println(time.getText());
        }


    });

}

我认为主要问题是javafx组件无法更新并可以从swing线程访问。我很乐意得到任何帮助。 谢谢

2 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

long timeStart = System.currentTimeMillis();

当聊天开始时,两个人聊了多久这样的事情:

long timePassed = System.currentTimeMillis() - timeStart;

这将让你通过多少毫秒。如果你想得到第二次除以1000.哦,如果你想在线程上,只需为这个东西创建一个线程..

答案 1 :(得分:1)

好的,谢谢大家的回答。我通过运行一个线程并使用算法来解决我的问题,该算法将显示我想要的00:00:00格式的时间。这是代码

   private void startTime(){
    if(timerStats==false)
    {
    timerStats = true;
    timer = new Timer();
    TimerTask timerTask = new TimerTask() {

        @Override
        public void run() {

            System.out.println("working" + x);

            timersec ++;

    Platform.runLater(new Runnable(){
        public void run(){               

           if (timersec == 60)
           {
               timersec = 0;
               timermin++;
           }
           if (timermin == 60)
            {
                   timermin = 0;
                   timerhr++;
            }

           String seconds = Integer.toString(timersec);
           String minutes = Integer.toString(timermin);
           String hours = Integer.toString(timerhr);

           if (timersec <= 9)
           {
               seconds = "0" + Integer.toString(timersec);
           }
           if (timermin <= 9)
           {
               minutes = "0" + Integer.toString(timermin);
           }
           if (timerhr <= 9)
           {
               hours = "0" + Integer.toString(timerhr);
           }

           time.setText(hours + ":" + minutes +":"+ seconds); 
            System.out.println(time.getText());
        }


    });


        }

    };
            timer.schedule(timerTask, 50, 50); //lastone is time, milli second

    }

}

谢谢