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"
        );

在这里插入图片描述

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