ProgressIndicator indeterminate transition bugs

Cirujano Cuesta, Diego diego.cirujano-cuesta at
Sun Feb 28 21:49:18 UTC 2016

Hi all,

We found two important bugs in ProgressIndicator that are related with the following tickets:

Now are quite critical because in a 4K monitor may cause OutOfMemoryException.

Using the following example:
public class JFXMain extends Application{

    public void start(Stage primaryStage) throws Exception {
        HBox root = new HBox();
        ToggleButton toggleButton = new ToggleButton();
        ProgressIndicator progressIndicator = new ProgressIndicator(ProgressIndicator.INDETERMINATE_PROGRESS);
        StackPane stackPane = new StackPane(progressIndicator);
        root.getChildren().addAll(toggleButton, stackPane);
        primaryStage.setScene(new Scene(root));;

** First bug **

Starting the Progress Indicator with indeterminate progress will trigger: rebuildTimeline by ProgressIndicatorSkin and in line 599 start the animation even is not shown already: indeterminateTransition.playFromStart();

** Second bug **

With the last commits in ProgressIndicator, as commented in JDK-8094829, the listeners do not care about the real visibility of the node(before it was used impl_treeVisibleProperty()). The consequence is that the ProgressIndicator in the example won´t be stopped.

I can imagine that impl_treeVisibleProperty() should not be used and Jonathan G. said: " but I can't reliably fix that without an API such as what I expect the treeVisible API should do." But we did not find such alternative property.

The solution we though is the usage of internal tree visible property like this:

1. Modify method:
	protected void updateAnimation(boolean isTreeVisible) {
2. Remove current calls to method in 
	@Override protected void handleControlPropertyChanged(String p) {

        if ("INDETERMINATE".equals(p)) {
        } else if ("PROGRESS".equals(p)) {
3. Add listener at the end of the IndeterminateSpinner contructor the visibility listener:
        private IndeterminateSpinner(boolean spinEnabled, Paint fillOverride) {
            impl_treeVisibleProperty().addListener((obs, oldVal, newVal) ->{

What do you think?

Additional note: I would like to add one more thing. I think that could be very good a property ReadOnlyBooleanProperty treeVisibleProperty() available in all Nodes.

Please let me know if we can do something else.


More information about the openjfx-dev mailing list