JxBrowser 连接不上
JxBrowser not connecting
我无法让 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 <
我是不是漏掉了什么?
如果您的 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
方法returns适合给定资源扩展的 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());
我无法让 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 <
我是不是漏掉了什么?
如果您的 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
方法returns适合给定资源扩展的 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:
browser.loadURL(Main.class.getResource("/assets/engine.html").toString());