我实际上有一个视频流应用程序,我想显示这两个人与彼此聊天的时间。我已经使用了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线程访问。我很乐意得到任何帮助。 谢谢
答案 0 :(得分:1)
您可以使用以下内容:
long timeStart = System.currentTimeMillis();
当聊天开始时,两个人聊了多久这样的事情:
long timePassed = System.currentTimeMillis() - timeStart;
这将让你通过多少毫秒。如果你想得到第二次除以1000.哦,如果你想在线程上,只需为这个东西创建一个线程..
答案 1 :(得分:1)
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
}
}
谢谢