在Java Swing中嵌入Firefox浏览器

我想知道是否可以将Firefox浏览器作为组件嵌入到基于 Java Swing的应用程序中.

我已经从互联网做了一些研究,但我找不到答案.有些人建议使用可在Java中使用的其他浏览器组件.我不认为这是更好的,因为渲染引擎将不同于Firefox.

任何想法?非常感谢.

解决方法

绝对我以前做过,请查看 Mozilla Embedding for Java

这是一些示例代码

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);
//      

        nsIBaseWindow baseWindow = (nsIBaseWindow) webbrowser.queryInterface(nsIBaseWindow.NS_IBASEWINDOW_IID);             
        long handle=FindWindow.getHWND( frameTitle );

        baseWindow.initwindow(handle,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",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,int curSelfProgress,int maxSelfProgress,int curTotalProgress,int maxTotalProgress) {
        c("onProgressChange");

    }

    public void onSecurityChange(nsIWebProgress webProgress,long state) {
        c("onSecurityChange");

    }

    public void onStateChange(nsIWebProgress webProgress,long stateFlags,long status) {
        c("onStateChange");

    }

    public void onStatusChange(nsIWebProgress webProgress,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]

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...