在Java Swing中嵌入Firefox浏览器 [英] Embed Firefox browser in Java Swing
本文介绍了在Java Swing中嵌入Firefox浏览器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我从互联网上做了一些研究,但我找不到答案。有人建议使用Java中可用的其他浏览器组件。我不认为这是可取的,因为渲染引擎将不同于Firefox。
任何想法?非常感谢。
解决方案
我之前完成了这个工作,请查看用于Java的Mozilla嵌入式
以下是一些示例代码
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.File;
import javax.swing。*;
import org.mozilla.xpcom。*;
import org.mozilla.interfaces。*;
/ *
网站ref
http://groups.google.com/group/mozilla.dev.tech.java/browse_thread/thread/898ba6751d0c57f7
http ://skrul.com/blog/code/
http://wirestorm.net/blog/?cat=9
* /
public class BrowserTest implements nsIWebProgressListener,nsIWeakReference,nsIInterfaceRequestor,nsIWebBrowserChrome,nsISHistoryListener {
static {
try {
System.loadLibrary(NativeWindow);
} catch(UnsatisfiedLinkError e){
System.err.println(找不到你的库);
}
}
private static final String frameTitle =GRE Embedded;
public static void main(String [] args){
BrowserConroller controler = new BrowserConroller();
controler.run();
new BrowserTest()。start();
public void start(){
JFrame f = new JFrame(frameTitle);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400,150);
容器内容= f.getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
content.add(new JLabel(Initializing ...));
f.setVisible(true);
文件grePath = null;
LocationProvider locProvider;
Mozilla mozilla = Mozilla.getInstance();
GREVersionRange [] range = new GREVersionRange [1];
range [0] = new GREVersionRange(1.8.0,true,1.9,false);
尝试{
grePath = Mozilla.getGREPathWithProperties(range,null);
mozilla.initialize(grePath);
locProvider = new LocationProvider(grePath);
mozilla.initEmbedding(grePath,grePath,locProvider);
catch(FileNotFoundException e){
System.out.println(Error:FileNotFoundException);
catch(XPCOMException e){
System.out.println(Error:XPCOMException);
}
// ---------- END GRE INITIALIZATION ------------
nsIServiceManager serviceManager = mozilla.getServiceManager();
nsIAppStartup appStartup =(nsIAppStartup)serviceManager.getServiceByContractID(@ mozilla.org/toolkit/app-startup;1,nsIAppStartup.NS_IAPPSTARTUP_IID);
nsIWindowCreator windowCreator =(nsIWindowCreator)appStartup.queryInterface(nsIWindowCreator.NS_IWINDOWCREATOR_IID);
nsIWindowWatcher windowWatcher =(nsIWindowWatcher)serviceManager.getServiceByContractID(@ mozilla.org/embedcomp/window-watcher;1\",nsIWindowWatcher.NS_IWINDOWWATCHER_IID);
windowWatcher.setWindowCreator(windowCreator);
nsIDOMWindow win = windowWatcher.openWindow(null,http://google.com,MAIN_WIN,chrome,resizable,centerscreen,null);
windowWatcher.setActiveWindow(win);
nsIComponentManager componentManager = mozilla.getComponentManager();
String NS_IWEBBROWSER_CID =F1EAC761-87E9-11d3-AF80-00A024FFC08C; // $ NON-NLS-1 $
nsIWebBrowser webBrowser =(nsIWebBrowser)componentManager.createInstance(NS_IWEBBROWSER_CID,null,nsIWebBrowser.NS_IWEBBROWSER_IID);
webBrowser.setContainerWindow(this);
webBrowser.addWebBrowserListener(this,nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID);
// nsIWebNavigation webNavigation =(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID);
// webNavigation.loadURI(http://www.zdnet.com,nsIWebNavigation.LOAD_FLAGS_NONE,null,null,null);
//
nsIBaseWindow baseWindow =(nsIBaseWindow)webBrowser.queryInterface(nsIBaseWindow.NS_IBASEWINDOW_IID);
long handle = FindWindow.getHWND(frameTitle);
baseWindow.initWindow(handle,0,0,0,350,350);
baseWindow.create();
baseWindow.setVisibility(true);
//
// nsIDOMWindow domWin = webBrowser.getContentDOMWindow();
// nsIDOMEventTarget domEventTarget =(nsIDOMEventTarget)domWin.queryInterface(nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID);
// domEventTarget.addEventListener(click,new EventListener(),false);
//
//将JFrame初始化后隐藏
f.setVisible(true);
//
// nsIWebNavigation webNavigation =(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID);
// webNavigation.loadURI(http://www.zdnet.com,nsIWebNavigation.LOAD_FLAGS_NONE,null,null,null);
//
appStartup.run();
System.out.println(try termEmbedding);
尝试{
System.out.println(mozilla.termEmbedding(); START);
mozilla.termEmbedding();
System.out.println(mozilla.termEmbedding(); FINISHED);
catch(XPCOMException e){
System.out.println(Fehler:XPCOMException);
}
System.out.println(finished termEmbedding);
System.out.println(全部完成);
$ b public void onLocationChange(nsIWebProgress webProgress,nsIRequest request,nsIURI location){
c(onLocationChange);
$ b public void onProgressChange(nsIWebProgress webProgress,nsIRequest request,int curSelfProgress,int maxSelfProgress,int curTotalProgress,int maxTotalProgress){
c(onProgressChange);
$ public void onSecurityChange(nsIWebProgress webProgress,nsIRequest request,long state){
c(onSecurityChange);
$ b public void onStateChange(nsIWebProgress webProgress,nsIRequest request,long stateFlags,long status){
c(onStateChange);
$ public void onStatusChange(nsIWebProgress webProgress,nsIRequest request,long status,String message){
c(onStatusChange);
$ public nsISupports queryInterface(String uuid){
c(queryInterface);
返回null;
$ b public nsISupports queryReferent(String uuid){
c(queryReferent);
返回null;
$ b $ public nsISupports getInterface(String uuid){
c(getInterface);
返回null;
}
private void c(Object o){
System.out.println(o);
}
public void destroyBrowserWindow(){
c(destroyBrowserWindow);
$ b public void exitModalEventLoop(long status){
c(exitModalEventLoop);
$ b public long getChromeFlags(){
c(getChromeFlags);
返回0;
$ b $ public nsIWebBrowser getWebBrowser(){
c(getWebBrowser);
返回null;
public boolean isWindowModal(){
c(isWindowModal);
返回false;
}
public void setChromeFlags(long chromeFlags){
c(setChromeFlags);
$ b public void setStatus(long statusType,String status){
c(setStatus);
$ b public void setWebBrowser(nsIWebBrowser webBrowser){
c(setWebBrowser);
public void showAsModal(){
c(showAsModal);
$ b public void sizeBrowserTo(int acx,int acy){
c(sizeBrowserTo);
$ b public boolean onHistoryGoBack(nsIURI backURI){
c(onHistoryGoBack);
返回false;
$ b $ public boolean onHistoryGoForward(nsIURI forwardURI){
c(onHistoryGoForward);
返回false;
$ b $ public boolean onHistoryGotoIndex(int index,nsIURI gotoURI){
c(onHistoryGotoIndex);
返回false;
$ b $ public void onHistoryNewEntry(nsIURI newURI){
c(onHistoryNewEntry);
}
public boolean onHistoryPurge(int numEntries){
c(onHistoryPurge);
返回false;
public boolean onHistoryReload(nsIURI reloadURI,long reloadFlags){
c(onHistoryReload);
返回false;
$ b} // public class JavaXPCOM_test1 [/ code]
I am wondering if it is possible to embed Firefox browser as a component in a Java Swing based application.
I have done a bit of research from the Internet, but I could not find an answer. Some people suggest to use other browser component avaiable in Java. I do not think that is preferable, as the rendering engine would be different to Firefox.
Any idea? Many thanks.
解决方案
Absolutely I have done it before please check out the Mozilla Embedding for Java
Here is some sample code
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.File;
import javax.swing.*;
import org.mozilla.xpcom.*;
import org.mozilla.interfaces.*;
/*
Websites ref
http://groups.google.com/group/mozilla.dev.tech.java/browse_thread/thread/898ba6751d0c57f7
http://skrul.com/blog/code/
http://wirestorm.net/blog/?cat=9
*/
public class BrowserTest implements nsIWebProgressListener,nsIWeakReference, nsIInterfaceRequestor, nsIWebBrowserChrome, nsISHistoryListener{
static {
try {
System.loadLibrary("NativeWindow");
} catch (UnsatisfiedLinkError e) {
System.err.println("can't find your library");
}
}
private static final String frameTitle="GRE Embedded";
public static void main(String[] args) {
BrowserConroller controler=new BrowserConroller();
controler.run();
new BrowserTest().start();
}
public void start(){
JFrame f = new JFrame( frameTitle );
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(400, 150);
Container content = f.getContentPane();
content.setBackground(Color.white);
content.setLayout(new FlowLayout());
content.add(new JLabel("Initializing ... "));
f.setVisible(true);
File grePath = null;
LocationProvider locProvider;
Mozilla mozilla = Mozilla.getInstance();
GREVersionRange[] range = new GREVersionRange[1];
range[0] = new GREVersionRange("1.8.0", true, "1.9", false);
try {
grePath = Mozilla.getGREPathWithProperties(range, null);
mozilla.initialize(grePath);
locProvider = new LocationProvider(grePath);
mozilla.initEmbedding(grePath, grePath, locProvider);
}
catch (FileNotFoundException e) {
System.out.println("Error: FileNotFoundException");
}
catch (XPCOMException e) {
System.out.println("Error: XPCOMException");
}
//---------- END GRE INITIALIZATION------------
nsIServiceManager serviceManager = mozilla.getServiceManager();
nsIAppStartup appStartup = (nsIAppStartup)serviceManager.getServiceByContractID("@mozilla.org/toolkit/app-startup;1", nsIAppStartup.NS_IAPPSTARTUP_IID);
nsIWindowCreator windowCreator = (nsIWindowCreator)appStartup.queryInterface(nsIWindowCreator.NS_IWINDOWCREATOR_IID);
nsIWindowWatcher windowWatcher =(nsIWindowWatcher)serviceManager.getServiceByContractID("@mozilla.org/embedcomp/window-watcher;1",nsIWindowWatcher.NS_IWINDOWWATCHER_IID);
windowWatcher.setWindowCreator(windowCreator);
nsIDOMWindow win = windowWatcher.openWindow(null, "http://google.com", "MAIN_WIN","chrome,resizable,centerscreen", null);
windowWatcher.setActiveWindow( win );
nsIComponentManager componentManager = mozilla.getComponentManager();
String NS_IWEBBROWSER_CID = "F1EAC761-87E9-11d3-AF80-00A024FFC08C"; //$NON-NLS-1$
nsIWebBrowser webBrowser = (nsIWebBrowser) componentManager.createInstance(NS_IWEBBROWSER_CID, null, nsIWebBrowser.NS_IWEBBROWSER_IID);
webBrowser.setContainerWindow(this);
webBrowser.addWebBrowserListener(this, nsIWebProgressListener.NS_IWEBPROGRESSLISTENER_IID);
// nsIWebNavigation webNavigation=(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID);
// webNavigation.loadURI("http://www.zdnet.com", nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
//
nsIBaseWindow baseWindow = (nsIBaseWindow) webBrowser.queryInterface(nsIBaseWindow.NS_IBASEWINDOW_IID);
long handle=FindWindow.getHWND( frameTitle );
baseWindow.initWindow(handle, 0, 0, 0,350,350);
baseWindow.create();
baseWindow.setVisibility(true);
//
// nsIDOMWindow domWin=webBrowser.getContentDOMWindow();
// nsIDOMEventTarget domEventTarget= (nsIDOMEventTarget)domWin.queryInterface(nsIDOMEventTarget.NS_IDOMEVENTTARGET_IID);
// domEventTarget.addEventListener("click", new EventListener(), false);
//
//Hide JFrame after it have been initialized
f.setVisible(true);
//
// nsIWebNavigation webNavigation=(nsIWebNavigation)webBrowser.queryInterface(nsIWebNavigation.NS_IWEBNAVIGATION_IID);
// webNavigation.loadURI("http://www.zdnet.com", nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
//
appStartup.run();
System.out.println("try termEmbedding");
try {
System.out.println("mozilla.termEmbedding(); START");
mozilla.termEmbedding();
System.out.println("mozilla.termEmbedding(); FINISHED");
}
catch (XPCOMException e) {
System.out.println("Fehler: XPCOMException");
}
System.out.println("finished termEmbedding");
System.out.println("All done");
}
public void onLocationChange(nsIWebProgress webProgress, nsIRequest request, nsIURI location) {
c("onLocationChange");
}
public void onProgressChange(nsIWebProgress webProgress, nsIRequest request, int curSelfProgress, int maxSelfProgress, int curTotalProgress, int maxTotalProgress) {
c("onProgressChange");
}
public void onSecurityChange(nsIWebProgress webProgress, nsIRequest request, long state) {
c("onSecurityChange");
}
public void onStateChange(nsIWebProgress webProgress, nsIRequest request, long stateFlags, long status) {
c("onStateChange");
}
public void onStatusChange(nsIWebProgress webProgress, nsIRequest request, long status, String message) {
c("onStatusChange");
}
public nsISupports queryInterface(String uuid) {
c("queryInterface");
return null;
}
public nsISupports queryReferent(String uuid) {
c("queryReferent");
return null;
}
public nsISupports getInterface(String uuid) {
c("getInterface");
return null;
}
private void c(Object o){
System.out.println(o);
}
public void destroyBrowserWindow() {
c("destroyBrowserWindow");
}
public void exitModalEventLoop(long status) {
c("exitModalEventLoop");
}
public long getChromeFlags() {
c("getChromeFlags");
return 0;
}
public nsIWebBrowser getWebBrowser() {
c("getWebBrowser");
return null;
}
public boolean isWindowModal() {
c("isWindowModal");
return false;
}
public void setChromeFlags(long chromeFlags) {
c("setChromeFlags");
}
public void setStatus(long statusType, String status) {
c("setStatus");
}
public void setWebBrowser(nsIWebBrowser webBrowser) {
c("setWebBrowser");
}
public void showAsModal() {
c("showAsModal");
}
public void sizeBrowserTo(int acx, int acy) {
c("sizeBrowserTo");
}
public boolean onHistoryGoBack(nsIURI backURI) {
c("onHistoryGoBack");
return false;
}
public boolean onHistoryGoForward(nsIURI forwardURI) {
c("onHistoryGoForward");
return false;
}
public boolean onHistoryGotoIndex(int index, nsIURI gotoURI) {
c(" onHistoryGotoIndex");
return false;
}
public void onHistoryNewEntry(nsIURI newURI) {
c(" onHistoryNewEntry");
}
public boolean onHistoryPurge(int numEntries) {
c(" onHistoryPurge");
return false;
}
public boolean onHistoryReload(nsIURI reloadURI, long reloadFlags) {
c(" onHistoryReload");
return false;
}
} //public class JavaXPCOM_test1[/code]
这篇关于在Java Swing中嵌入Firefox浏览器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文