Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javafx计时器制作秒表_Java_Javafx_Timer - Fatal编程技术网

使用javafx计时器制作秒表

使用javafx计时器制作秒表,java,javafx,timer,Java,Javafx,Timer,我实际上有一个视频流应用程序,我想显示两个人聊天的时间。我使用了java.util类的Timer和TimerTask,但它给出的错误是“不在FX应用程序线程上”,这意味着我不能使用swing线程将文本设置为java FX组件。这就是我迄今为止所尝试的:- int timerx=0 //global variable private void timer(){ /*SHOWING TIME PASSED*/ int x=0; Timer timer = new Ti

我实际上有一个视频流应用程序,我想显示两个人聊天的时间。我使用了java.util类的Timer和TimerTask,但它给出的错误是“不在FX应用程序线程上”,这意味着我不能使用swing线程将文本设置为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线程访问。我很乐意得到任何帮助。
谢谢你

你可以这样使用:

long timeStart = System.currentTimeMillis();
long timePassed = System.currentTimeMillis() - timeStart;
当聊天开始时,两个家伙聊了多长时间,比如:

long timeStart = System.currentTimeMillis();
long timePassed = System.currentTimeMillis() - timeStart;

这将得到经过的毫秒数。如果你想得到秒数,就把它除以1000。哦,如果你想把它放在线程上,就为这个东西创建一个线程。

好的,谢谢大家的回答。我通过运行一个线程并使用算法来解决我的问题,该算法将以我想要的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

    }

}
private void startTime(){
if(timerStats==false)
{
timerStats=真;
定时器=新定时器();
TimerTask TimerTask=新TimerTask(){
@凌驾
公开募捐{
系统输出打印项次(“工作”+x);
timersec++;
Platform.runLater(新的Runnable(){
public void run(){
如果(timersec==60)
{
timersec=0;
timermin++;
}
如果(timermin==60)
{
timermin=0;
timerhr++;
}
字符串秒数=整数.toString(timersec);
字符串分钟数=整数.toString(timermin);
字符串小时数=整数.toString(timerhr);

如果(timersec那么你流式传输视频聊天?你可以按系统时间来计算。当聊天开始时,保存系统时间,然后你就可以计算聊天持续的时间。谢谢你的回答,但不是有一种简单的方法可以用线程来显示时间吗?我的意思是,目的只是显示视频流式传输的持续时间。@BetaRide I请更新代码。请看一看