首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JxBrowser未连接

JxBrowser未连接
EN

Stack Overflow用户
提问于 2018-02-05 23:43:16
回答 1查看 479关注 0票数 0

我在让jxbrowser在开发环境之外工作时遇到了麻烦。当我在eclipse中运行它时,它工作得很好,但是当我编译它并运行时,屏幕似乎没有加载。下面是我使用的代码:

代码语言:javascript
复制
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 <

我是不是遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-07 16:42:26

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

代码语言:javascript
复制
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类型:

代码语言:javascript
复制
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归档中加载资源:

代码语言:javascript
复制
browser.loadURL(Main.class.getResource("/assets/engine.html").toString()); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48626215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档