/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package leak; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Scene; import javafx.scene.control.ScrollPane; import javafx.scene.layout.StackPane; import javafx.scene.paint.Color; import javafx.scene.shape.Circle; import javafx.stage.Stage; import javafx.util.Duration; /** * * @author kcr */ public class ScrollPaneLeak extends Application { private int instance = 0; @Override public void start(Stage stage) throws Exception { stage.setTitle("ScrollPane Leak Test"); final StackPane root = new StackPane(); Scene scene = new Scene(root, 400, 300); stage.setScene(scene); stage.show(); KeyFrame keyFrame1 = new KeyFrame(Duration.millis(1000), new EventHandler() { @Override public void handle(ActionEvent event) { ++instance; Circle circle = new Circle(400, 400, 400, Color.BLUE); circle.setId("Circle #" + instance); ScrollPane scrollPane = new ScrollPane(circle); scrollPane.setId("ScrollPane #" + instance); root.getChildren().add(scrollPane); } }); KeyFrame keyFrame2 = new KeyFrame(Duration.millis(2000), new EventHandler() { @Override public void handle(ActionEvent event) { root.getChildren().clear(); } }); Timeline timeline = new Timeline(keyFrame1, keyFrame2); timeline.setCycleCount(5); timeline.play(); } public static void main(String[] args) { Application.launch(args); } }