swing内嵌谷歌浏览器
时间: 2023-12-04 22:40:08 浏览: 36
以下是使用Swing和JCEF实现内嵌谷歌浏览器的示例代码:
```java
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.cef.CefApp;
import org.cef.CefClient;
import org.cef.CefSettings;
import org.cef.browser.CefBrowser;
import org.cef.browser.CefFrame;
import org.cef.handler.CefAppHandlerAdapter;
import org.cef.handler.CefLoadHandlerAdapter;
import org.cef.handler.CefMessageRouterHandlerAdapter;
import org.cef.handler.CefRequestHandlerAdapter;
import org.cef.handler.CefResourceHandlerAdapter;
import org.cef.handler.CefResourceRequestHandler;
import org.cef.handler.CefResourceRequestHandlerAdapter;
import org.cef.handler.CefResourceResponseHandlerAdapter;
import org.cef.handler.CefResponseFilter;
import org.cef.handler.CefResponseFilterAdapter;
import org.cef.handler.CefResponseHandlerAdapter;
import org.cef.handler.CefResourceHandler;
import org.cef.network.CefCookieManager;
public class SwingBrowser {
private static final AtomicBoolean initialized = new AtomicBoolean();
public static void main(String[] args) {
if (!initialized.getAndSet(true)) {
CefApp.addAppHandler(new CefAppHandlerAdapter(args) {
@Override
public void stateHasChanged(org.cef.CefApp.CefAppState state) {
if (state == CefAppState.TERMINATED) {
System.exit(0);
}
}
});
CefApp.addMessageRouterHandler(new CefMessageRouterHandlerAdapter() {
@Override
public boolean onQuery(CefBrowser browser, CefFrame frame, long query_id, String request, boolean persistent, CefQueryCallback callback) {
System.out.println("Received message: " + request);
return false;
}
});
CefApp.addResourceRequestHandler(new CefResourceRequestHandlerAdapter() {
@Override
public CefResourceHandler getResourceHandler(CefBrowser browser, CefFrame frame, CefRequest request) {
String url = request.getURL();
if (url.startsWith("http://localhost:8080/")) {
return new CefResourceHandlerAdapter() {
@Override
public boolean processRequest(CefRequest request, CefCallback callback) {
String html = "<html><body><h1>Hello, world!</h1></body></html>";
byte[] bytes = html.getBytes();
callback.Continue(bytes, bytes.length);
return true;
}
};
}
return null;
}
}, "");
}
CefSettings settings = new CefSettings();
settings.windowless_rendering_enabled = true;
CefApp cefApp = CefApp.getInstance(args, settings);
CefCookieManager cookieManager = cefApp.getCookieManager();
cookieManager.setStoragePath(System.getProperty("java.io.tmpdir"));
JFrame frame = new JFrame("Swing Browser");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
cefApp.dispose();
}
});
JPanel panel = new JPanel(new BorderLayout());
panel.setPreferredSize(new Dimension(800, 600));
CefClient client = cefApp.createClient();
CefBrowser browser = client.createBrowser("http://localhost:8080/", false, false);
browser.setLoadHandler(new CefLoadHandlerAdapter() {
@Override
public void onLoadingStateChange(CefBrowser browser, boolean isLoading, boolean canGoBack, boolean canGoForward) {
if (!isLoading) {
Component component = browser.getUIComponent();
panel.add(component, BorderLayout.CENTER);
panel.revalidate();
}
}
});
client.addRequestHandler(new CefRequestHandlerAdapter() {
@Override
public boolean onBeforeBrowse(CefBrowser browser, CefFrame frame, CefRequest request, boolean is_redirect) {
String url = request.getURL();
if (url.startsWith("http://localhost:8080/")) {
return false;
}
return true;
}
});
client.addResponseFilter(new CefResponseFilterAdapter() {
@Override
public FilterStatus filter(CefResponse response, java.nio.ByteBuffer data_out) {
String mimeType = response.getMimeType();
if (mimeType != null && mimeType.startsWith("text/html")) {
String html = "<html><body><h1>Hello, world!</h1></body></html>";
byte[] bytes = html.getBytes();
data_out.put(bytes);
return FilterStatus.FILTER_DONE;
}
return FilterStatus.FILTER_CONTINUE;
}
});
frame.setContentPane(panel);
frame.pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
frame.setLocation((screenSize.width - frame.getWidth()) / 2, (screenSize.height - frame.getHeight()) / 2);
frame.setVisible(true);
}
}
```