Java Chromium嵌入式框架(JCEF)使用Chromium命令行

Java Chromium嵌入式框架(JCEF)使用Chromium命令行,java,command-line,chromium-embedded,Java,Command Line,Chromium Embedded,我尝试将--ignore gpu blacklist参数设置为JCEF,但找不到方法。我应该使用的方法是:CefApp::onBeforeCommandLineProcessing(String,CefCommandLine)。但是我找不到一个示例或很好的说明来说明如何做命令行是一个接口,我找不到任何实现 我发现的所有指令都与CEF相关,而不是JCEF,显然有些类是不同的。任何人都可以发布一个小示例,说明如何从字符串str=“--ignore gpu blacklist”向CEF传递Chromi

我尝试将
--ignore gpu blacklist
参数设置为JCEF,但找不到方法。我应该使用的方法是:
CefApp::onBeforeCommandLineProcessing(String,CefCommandLine)。
但是我找不到一个示例或很好的说明来说明如何做<代码>命令行是一个接口,我找不到任何实现


我发现的所有指令都与CEF相关,而不是JCEF,显然有些类是不同的。任何人都可以发布一个小示例,说明如何从字符串
str=“--ignore gpu blacklist”向CEF传递Chromium参数

您有几种可能将参数从JCEF传递到CEF/chromium

1) 最简单的方法:

public static void main(String [] args) {

    [...]

    ArrayList<String> mySwitches = new ArrayList<>();
    mySwitches.add("--persist-session-cookies=true");
    CefApp app = CefApp.getInstance(mySwitches.toArray(new String[mySwitches.size()]));
    CefClient client = app.createClient();
    CefBrowser browser = client.createBrowser("http://www.google.com", false, false);

    [...]
}
(b) 将AppHandler传递给CefApp

public static void main(String [] args) {

    [...]

    MyAppHandler appHandler = new MyAppHandler(args);
    CefApp.addAppHandler(appHandler);

    CefApp app = CefApp.getInstance(args);
    CefClient client = app.createClient();
    CefBrowser browser = client.createBrowser("http://www.google.com", false, false);

    [...]
}
使用此方法,您将做两件事:

(a) 将程序参数(arg)传递给CefApp,然后

(b) 您可以利用有机会操纵onBeforeCommandLineProcessing中解析参数的完整过程

如果打开JCEF detailed main frame的示例代码,您将发现该方法在中实现: -tests.detailed.MainFrame.MainFrame(布尔值,字符串,字符串[])

因此,实现onBeforeCommandLineProcessing等同于CEF,但它是用Java而不是C/C++编写的

问候,,
Kai

您有几种可能将参数从JCEF传递到CEF/chromium

1) 最简单的方法:

public static void main(String [] args) {

    [...]

    ArrayList<String> mySwitches = new ArrayList<>();
    mySwitches.add("--persist-session-cookies=true");
    CefApp app = CefApp.getInstance(mySwitches.toArray(new String[mySwitches.size()]));
    CefClient client = app.createClient();
    CefBrowser browser = client.createBrowser("http://www.google.com", false, false);

    [...]
}
(b) 将AppHandler传递给CefApp

public static void main(String [] args) {

    [...]

    MyAppHandler appHandler = new MyAppHandler(args);
    CefApp.addAppHandler(appHandler);

    CefApp app = CefApp.getInstance(args);
    CefClient client = app.createClient();
    CefBrowser browser = client.createBrowser("http://www.google.com", false, false);

    [...]
}
使用此方法,您将做两件事:

(a) 将程序参数(arg)传递给CefApp,然后

(b) 您可以利用有机会操纵onBeforeCommandLineProcessing中解析参数的完整过程

如果打开JCEF detailed main frame的示例代码,您将发现该方法在中实现: -tests.detailed.MainFrame.MainFrame(布尔值,字符串,字符串[])

因此,实现onBeforeCommandLineProcessing等同于CEF,但它是用Java而不是C/C++编写的

问候,,
Kai

根据您的问题:在我的示例中,只需将“-persist session cookies=true”替换为“-ignore gpu blacklist”,您就可以了。在示例2a)中,将“appendSwitchWithValue(…)替换为appendSwitch(“忽略gpu黑名单”)。非常感谢,但我仍然得到“不支持WebGL”“。我是不是错过了启用WebGL的一些东西?我认为WebGL是另一回事。可能基础共享库未被CEF链接/找到。你跟踪了吗?尝试使用JCEF的一个示例应用程序(MainFrame simple或detailed)来确定WebGL是否可以使用这些应用程序。根据您的问题:只需将我的示例中的“-persist session cookies=true”替换为“-ignore gpu blacklist”,就可以了。在示例2a)中,将“appendSwitchWithValue(…)替换为appendSwitch(“忽略gpu黑名单”)。非常感谢,但我仍然得到“不支持WebGL”“。我是不是错过了启用WebGL的一些东西?我认为WebGL是另一回事。可能基础共享库未被CEF链接/找到。你跟踪了吗?尝试使用JCEF的一个示例应用程序(MainFrame simple或detailed)来确定WebGL是否可以使用这些应用程序。