我从这行代码中随机收到一个奇怪的错误:
playHead.setValue(atTime)
(播放头是一个SimpleObjectProperty
)
playHead
用作元素 (a ) 的值所依赖的Binding
a 的一部分。这是否意味着任何时候更新,都需要在主线程上?GUI
TableView
playHead
如,它应该是:
javafx.application.Platform.runLater(new Runnable() {
@Override
public void run() {
playHead.setValue(atTime);
}
});
这看起来很奇怪,因为包含 的类playHead
应该能够独立于 GUI 运行。有没有办法定义绑定,以便它在主线程上执行?这样,我可以保持良好的设计实践。
这是TableView
返回绑定的回调:
public class CuePreWaitCallback implements Callback<TableColumn.CellDataFeatures<Cue,String>, ObservableValue<String>> {
@Override
public ObservableValue<String> call(final CellDataFeatures<Cue, String> param) {
final Timeline preWait = param.getValue().getCueTimeline().getPreWait();
return new StringBinding() {
{
super.bind(param.getValue().getCueTimeline().getPreWait().playhead());
super.bind(param.getValue().getCueTimeline().getPreWait().waitTime());
}
@Override
protected String computeValue() {
try {
System.out.println("Value Called---------------------------------------------->");
return preWait.getAbsoluteDuration().subtract(preWait.getPlayhead()).toString();
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
return "";
}
}
};
}
}