package webviewtest2; import java.awt.BorderLayout; import javafx.animation.KeyFrame; import javafx.animation.Timeline; import javafx.application.Application; import javafx.application.Platform; import javafx.embed.swing.JFXPanel; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.control.TextArea; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.util.Duration; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class LeakTest extends Application { private JFrame frame; public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setScene(new Scene(new Group(), 500, 500)); primaryStage.show(); Timeline timeline = new Timeline(); timeline.setCycleCount(Timeline.INDEFINITE); EventHandler handler = new EventHandler() { @Override public void handle(ActionEvent e) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { recreateFrame(); } }); } }; timeline.getKeyFrames().add( new KeyFrame(Duration.millis(1000), handler)); timeline.play(); } private void recreateFrame() { if (frame != null) { frame.dispose(); } final JFXPanel jfxPanel = new JFXPanel(); frame = new JFrame(); frame.setSize(500, 500); frame.getContentPane().setLayout(new BorderLayout()); frame.getContentPane().add(BorderLayout.CENTER, jfxPanel); frame.setLocationRelativeTo(null); frame.setVisible(true); Platform.runLater(new Runnable() { @Override public void run() { GridPane gridPane = new GridPane(); for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { gridPane.add(new TextArea("test"), i, j); } } Scene scene = new Scene(gridPane); jfxPanel.setScene(scene); } }); } }