Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8113296

Swing embedded webview using excessive memory when navigating/resizing

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: P4 P4
    • None
    • None
    • javafx
    • None
    • Windows 7 64-bit

      java version "1.6.0_26"
      Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
      Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)

      JavaFX 2.0 Beta SDK (build 30)

    • web

      with the following test code and usage like average browser. The memory consumption went up to 800m+ in task manager (increased rapidly if constantly re-sizing the frame).

      import javax.swing.JFrame;

      import javafx.application.Platform;
      import javafx.beans.value.InvalidationListener;
      import javafx.beans.value.ObservableValue;
      import javafx.embed.swing.JFXPanel;
      import javafx.scene.Group;
      import javafx.scene.Scene;
      import javafx.scene.web.WebEngine;
      import javafx.scene.web.WebView;

      /**
       * @author rdong
       */
      public class BrowserPanel
          extends JFXPanel
      {

          private WebView browser;

          private WebEngine webEngine;

          private Scene scene;

          public BrowserPanel(final String url)
          {
              Platform.runLater(new Runnable()
              {
                  public void run()
                  {
                      createBrowserScene(url);
                  }
              });
          }

          /**
           * @param url
           *
           */
          protected void createBrowserScene(String url)
          {
              Group root = new Group();
              setScene(scene = new Scene(root));
              root.getChildren().add(browser = new WebView());
              webEngine = new WebEngine(url);
              browser.setEngine(webEngine);
              scene.widthProperty().addListener(new InvalidationListener()
              {
                  @Override
                  public void invalidated(ObservableValue ov)
                  {
                      browser.resize(scene.getWidth(), scene.getHeight());
                  }
              });
              scene.heightProperty().addListener(new InvalidationListener()
              {
                  @Override
                  public void invalidated(ObservableValue ov)
                  {
                      browser.resize(scene.getWidth(), scene.getHeight());
                  }
              });
              browser.widthProperty().addListener(new InvalidationListener()
              {
                  @Override
                  public void invalidated(ObservableValue ov)
                  {
                      browser.resize(scene.getWidth(), scene.getHeight());
                  }
              });
              browser.heightProperty().addListener(new InvalidationListener()
              {
                  @Override
                  public void invalidated(ObservableValue ov)
                  {
                      browser.resize(scene.getWidth(), scene.getHeight());
                  }
              });
          }
          
          public static void main(String[] args)
          {
              JFrame f = new JFrame();
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              f.setSize(500, 400);
              f.getContentPane().add(new BrowserPanel("http://yahoo.com"));
              f.setVisible(true);
          }
      }

            malenkov Sergey Malenkov (Inactive)
            rdongjfx Rick Dong (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported: