javafx 輕量級模式BrowserType.LIGHTWEIGHT渲染很慢

前情提要

  1. 瀏覽器插件從自帶的WebView 改成 JxBrowser 提供的 BrowserView
  2. 使用primaryStage.initStyle(StageStyle.TRANSPARENT);模式去掉了系統自帶的標題欄 , 此時如果再使用 BrowserType.HEAVYWEIGHT 重量級模式, 就無法拖拽, 所以必須使用 輕量級模式 BrowserType.LIGHTWEIGHT, 但是這就導致渲染卡頓, 沒有重量級模式 流暢.

重點來了

  1. 使用 fxml 配置 是默認 重量級模式的:
  <?import com.teamdev.jxbrowser.chromium.javafx.BrowserView?>
  <?import javafx.scene.layout.VBox?>
  <fx:root type="javafx.scene.layout.VBox" maxHeight="-Infinity" maxWidth="-Infinity" 
        minHeight="-Infinity" minWidth="-Infinity"
        prefHeight="900.0" prefWidth="1200.0"  xmlns:fx="http://javafx.com/fxml">
       <!--使用這種方式生成的BrowserView默認的BrowserType是重量級的,會覆蓋之前的插件,導致無法拖拽-->
       <!--改用代碼中新建對象的方式,可以初始化爲輕量級的,就可以拖拽-->
      <BrowserView fx:id="contentWeb" prefHeight="900.0" prefWidth="1200.0"></BrowserView>
</fx:root>
  1. 所以需要改成代碼生成的形式, 指定爲輕量級模式.
       BrowserView contentWeb = new BrowserView(new Browser(BrowserType.LIGHTWEIGHT));
       contentWeb.setPrefWidth(1200.0);
       contentWeb.setPrefHeight(900.0);
       root.getChildren().add(contentWeb);

這下可以拖拽了, 但是渲染慢是個大問題
該怎麼辦呢?

王牌來了

官方提供了加速的功能: 添加一下這句即可:

        // 加速輕量級Browser
        BrowserPreferences.setChromiumSwitches(
                "--disable-gpu",
                "--disable-gpu-compositing",
                "--enable-begin-frame-scheduling",
                "--software-rendering-fps=60"
        );

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章