Java 如何将JCEF与Intellij一起使用?

Java 如何将JCEF与Intellij一起使用?,java,chromium,Java,Chromium,我一直在试图找出是否有一种方法可以使用Chromium浏览器作为Java应用程序的UI。我发现了这个IntelliJ页面:我不明白的是我如何在我的项目中实际使用它。我的IntelliJ版本是2020.3,它说在2020.2默认情况下启用了JCEF。然而,我不知道如何在我的项目中使用JCEF。我似乎找不到任何清晰的文档。例如,当我尝试导入com.intellij时,它找不到包 在我的IntelliJ项目中是否有集成JCEF的教程或指南 您可以运行jetty server或使用资源提供程序。 资源提

我一直在试图找出是否有一种方法可以使用Chromium浏览器作为Java应用程序的UI。我发现了这个IntelliJ页面:我不明白的是我如何在我的项目中实际使用它。我的IntelliJ版本是2020.3,它说在2020.2默认情况下启用了JCEF。然而,我不知道如何在我的项目中使用JCEF。我似乎找不到任何清晰的文档。例如,当我尝试导入com.intellij时,它找不到包

在我的IntelliJ项目中是否有集成JCEF的教程或指南

  • 您可以运行jetty server或使用资源提供程序。 资源提供者的示例:

  • 此抽象WebDialog示例还解释了如何将数据传递给fe:

  • 后端的所有魔法类BrowserPipe(WebDialog.kt文件)和前端类中的相同类

    下一个js文件是魔法的另一部分

     <script src="http://registercallback/events.js"></script>
    
    有关更多详细信息,请查看(WebDialog.kt文件)中的这一行代码

    经过所有操作后,我能够以简单的方式编写组件: FE:

    是:

    override fun callbacks():列表{
    val data=ArrayList(project.getSettings().envs.map{it.copy()})
    这个数据=数据;
    返回列表(
    BrowserCallback(“componentReady”){主体,管道->
    info(“更新${body}”)
    pipe.post(“initData”,mapper.writeValueAsString(mapOf(
    “updateModes”到updateModes,
    “分支”到project.getRepository().GetLocalBranchs(),
    “环境”到数据,
    )))
    },
    BrowserCallback(“envsUpdated”){主体,管道->
    logger.info(“envsUpdated${body}”)
    val envs=mapper.readValue(正文)
    this.data=ArrayList(envs);
    }
    )
    }
    
    如果在linux jcef上抛出
    [0827/153404.046731:致命:gpu\u data\u manager\u impl\u private.cc(439)]gpu进程不可用。再见。
    您可以通过下一个代码禁用gpu:
    类gpu编辑器:jbceAppRequiredArgumentsProvider{覆盖val选项:List get()=listOf(“--disable gpu”,“--disable gpu compositing”)}
    CefApp.getInstance().registerSchemeHandlerFactory("http", "registercallback", InjectJsHandlerFactory(inject()))
    
      constructor(private zone: NgZone) {
        let w: any = window;
        w.messagePipe.subscribe('initData', (res) => {
          console.info('initData', res);
          zone.run(() => {
            this.updateData(res);
          });
        });
        w.messagePipe.post('componentReady', 'SettingsComponent ready')
      }
    
    override fun callbacks(): List<BrowserCallback> {
        val data = ArrayList(project.getSettings().envs.map { it.copy() })
        this.data = data;
        return listOf(
            BrowserCallback("componentReady") {body, pipe ->
                logger.info("Update ${body}")
                pipe.post("initData", mapper.writeValueAsString(mapOf(
                    "updateModes" to updateModes,
                    "branches" to project.getRepository().getLocalBranches(),
                    "envs" to data,
                )))
            },
            BrowserCallback("envsUpdated") {body, pipe ->
                logger.info("envsUpdated ${body}")
                val envs = mapper.readValue<List<EnvironmentSettings>>(body)
                this.data = ArrayList(envs);
            }
        )
    }