【问题标题】:JxBrowser not connectingJxBrowser 未连接
【发布时间】:2018-02-07 16:42:26
【问题描述】:

我无法让 jxbrowser 在开发环境之外工作。当我在 Eclipse 中运行它时,它工作正常,但是当我编译它并运行它时,屏幕似乎没有加载。这是我正在使用的代码:

browser = new Browser();
com.teamdev.jxbrowser.chromium.swing.BrowserView view = new com.teamdev.jxbrowser.chromium.swing.BrowserView(browser);
javax.swing.JFrame frame = new javax.swing.JFrame();
frame.add(view, java.awt.BorderLayout.CENTER);
frame.setSize(800, 450);
frame.setVisible(true);
browser.loadURL(Main.class.getResource("/assets/engine.html").toExternalForm());

> When I run from eclipse <

> When I compile and run <

我错过了什么吗?

【问题讨论】:

    标签: jxbrowser


    【解决方案1】:

    如果您的 HTML 资源 "/assets/engine.html" 在构建后位于 RPGItems.jar 内,默认情况下 Chromium 引擎将无法正确解析它的路径。为了能够加载位于 JAR 存档中的资源,您必须使用以下实现注册自定义 ProtocolHandler

    BrowserContext browserContext = browser.getContext();
    ProtocolService protocolService = browserContext.getProtocolService();
    protocolService.setProtocolHandler("jar", new ProtocolHandler() {
        @Override
        public URLResponse onRequest(URLRequest request) {
            try {
                URLResponse response = new URLResponse();
                URL path = new URL(request.getURL());
                InputStream inputStream = path.openStream();
                DataInputStream stream = new DataInputStream(inputStream);
                byte[] data = new byte[stream.available()];
                stream.readFully(data);
                response.setData(data);
                String mimeType = getMimeType(path.toString());
                response.getHeaders().setHeader("Content-Type", mimeType);
                return response;
            } catch (Exception ignored) {}
            return null;
        }
    });
    

    这里的getMimeType方法为给定的资源扩展返回适当的mime类型:

    private static String getMimeType(String path) {
        if (path.endsWith(".html")) {
            return "text/html";
        }
        if (path.endsWith(".css")) {
            return "text/css";
        }
        if (path.endsWith(".js")) {
            return "text/javascript";
        }
        return "text/html";
    }
    

    注册ProtocolHandler 并定义支持的mime 类型后,您就可以使用标准Java 和JxBrowser API 从JAR 存档加载资源:

    browser.loadURL(Main.class.getResource("/assets/engine.html").toString()); 
    

    【讨论】:

    • 谢谢你成功了!你知道如何添加 URL 参数吗?例如 engine.html&threads=4&autothread=true&throttle=0.0
    • 如果您需要使用application/x-www-form-urlencoded 的这些数据执行 POST 请求,您应该尝试为此使用loadURL() 重载。例如:browser.loadURL(new LoadURLParams(Main.class.getResource("/assets/engine.html").toString(), "threads=4&amp;autothread=true&amp;throttle=0.0"));。然后可以在协议处理程序中以URLRequest.getUploadData() 的形式检索这些数据。
    猜你喜欢
    • 2021-06-29
    • 2023-03-14
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多