別の画像がロードされているときに、ピクチャビューアの進捗値を取得しようとしています。私はそれを行うには2つの簡単な方法を試みたが、それは私のためにうまくいかなかった。JavaFX - 進行状況のプロパティが機能しません。
まず私はImage
クラスからprogressProperty
を使用していた。
public boolean nextImageClicked()
{
if(PICTURE_INDEX < picturePaths.size() - 1)
{
String path = picturePaths.get(PICTURE_INDEX + 1).toURI().toString();
Image newImage = new Image(path);
newImage.progressProperty().addListener((observable, oldValue, newValue) -> System.out.println("Current progress: "+newValue));
GUI.getImageView().setImage(newImage);
adjustImageViewBounds();
PICTURE_INDEX += 1;
return true;
}
else return false;
}
進捗値が異様に変更されないので、コンソールに何も出力しませんでした。だから私はTask<Void>
ですべての作業のものを入れてみましたとTask
を通じて進捗値を取得しました。期待して
public boolean nextClicked()
{
if(PICTURE_INDEX < picturePaths.size() - 1)
{
Task<Void> task = new Task<Void>()
{
@Override protected Void call() throws Exception
{
String path = picturePaths.get(PICTURE_INDEX + 1).toURI().toString();
Image newImage = new Image(path);
GUI.getImageView().setImage(newImage);
adjustImageViewBounds();
PICTURE_INDEX += 1;
return null;
}
};
task.setOnRunning(e -> System.out.println(task.getProgress()));
task.progressProperty().addListener((observable, oldValue, newValue) ->
{
System.out.println(newValue);
});
task.run();
return true;
}
else return false;
}
もうまくいきませんでした。
task.setOnRunning(e -> System.out.println(task.getProgress()));
これを実装してデフォルト値を確認したところ、 "-1"が出力されました。
コンソールに「0.1」、「0.14」などの単一の進捗値が返されるように変更するにはどうすればよいですか?
'Image'の' backgroundLoading'フラグのデフォルト値は文書化されていませんが、 'false'と信じています。したがって、指定しない場合、 'Image'コンストラクタは画像がロードされるまでブロックします。その結果、リスナーを登録した後では、 'progress'プロパティは変更されません(ロードはすでにその時点で完了しています)。背景の読み込みを 'true'に設定してみてください。それでも、イメージがすばやく読み込まれると、出力は表示されません。 –
タスクバージョンでは、タスクの進捗プロパティを更新することはありません。そのため、値の変更が表示される理由はありません。 –
コンストラクタを使ってbackgroundLoadingプロパティをtrueに変更しました。仕事は何ですか?どうすればそれを入手できますか?答えとして投稿してください。私はそれを参考にしてマークすることができます。 – Rouman