このコード行からランダムな時間に奇妙なエラーが発生しています。
playHead.setValue(atTime)
(playHead は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 "";
}
}
};
}
}