我正在編寫一個程序,它將實時執行相當多的工作,它處理來自視頻的圖像並在JavaFx上顯示圖像ImageView
,問題是我無法更新從另一個線程主線程的組件,所以我雖然使用一個Timer
代替的一種方式,一個線程一直落後Java是不是線程安全的,它主要是掛起,所以下面是如何我已經實現了我的代碼Java中的多線程問題JavaFX應用程序
TimerTask frame_grabber = new TimerTask()
{
@Override
public void run()
{
processVideo();
Platform.runLater(new Runnable() {
@Override public void run() {
imageView.setImage(tmp);
}
});
}
};
timer = new Timer();
Double period = 1000/getFPS() * 2;
this.timer.schedule(frame_grabber, 0, period.longValue());
這似乎工作得更好,但我的整個GUI
是laggying,有人可以建議我一個更好的方式處理視頻和更新我的UI
沒有造成任何滯後?
你可以嘗試去耦從UI幀速率定時器的預設速率。 JavaFX幀速率約爲60 fps,你可能想更頻繁地調用'TimerTask'。更確切地說,在任何建議中,你可能應該發佈'processVideo'的代碼。 – hotzst