Having trouble with Embedding Mozilla

"J.J. Zhuang" <[email protected]> Mon, 9 Jul 2007 23:40:35 -0700 (PDT)
Newsgroups gmane.comp.mozilla.devel.java
Message-ID <4750855.287571184049635047.JavaMail.root__10735.5951950469$1184049917$gmane$org@dogfood.zimbra.com>
I'm trying out embedding mozilla in my java program.  I followed the example give at this URL:

http://developer.mozilla.org/en/docs/JavaXPCOM:Embedding_Mozilla_in_a_Java_Application_using_JavaXPCOM

Here's my code:

public class SimpleLauncher {

    public static class LocationProvider implements IAppFileLocProvider {

        File grePath;

        public LocationProvider(File grePath) {
            this.grePath = grePath;
        }

        public File getFile(String aProp, boolean[] aPersistent) {
            System.out.println(aProp);
            System.out.println(aPersistent);

            File file = null;
            if (aProp.equals("GreD") || aProp.equals("GreComsD")) {
                file = grePath;
                if (aProp.equals("GreComsD")) {
                    file = new File(file, "components");
                }
            } else if (aProp.equals("MozBinD") || aProp.equals("CurProcD")
                    || aProp.equals("ComsD") || aProp.equals("ProfD")) {
                file = grePath;
                if (aProp.equals("ComsD")) {
                    file = new File(file, "components");
                }
            }
            return file;
        }

        public File[] getFiles(String aProp) {
            System.out.println(aProp);

            File[] files = null;
            if (aProp.equals("APluginsDL")) {
                files = new File[1];
                files[0] = new File(grePath, "plugins");
            }
            return files;
        }
    }

   public static void main(String[] args) {

        Mozilla mozilla = Mozilla.getInstance();
        GREVersionRange[] range = new GREVersionRange[1];
        range[0] = new GREVersionRange("1.8.0", true, "1.9", false);
        // work with trunk nightly version 1.9a1

        try {
            File grePath = Mozilla.getGREPathWithProperties(range, null);
            System.out.println(grePath.toString());

            mozilla.initialize(grePath);
            LocationProvider locProvider = new LocationProvider(grePath);
            mozilla.initEmbedding(grePath, grePath, locProvider);

            // Now we need to start an XUL application, so we get an instance of
            // the
            // XPCOM service manager
            nsIServiceManager serviceManager = mozilla.getServiceManager();

            // Now we need to get the @mozilla.org/toolkit/app-startup;1
            // service:
            nsIAppStartup appStartup = (nsIAppStartup) serviceManager
                    .getServiceByContractID(
                            "@mozilla.org/toolkit/app-startup;1",
                            nsIAppStartup.NS_IAPPSTARTUP_IID);

            // Get the nsIWindowWatcher interface to the above
            nsIWindowCreator windowCreator = (nsIWindowCreator) appStartup
                    .queryInterface(nsIWindowCreator.NS_IWINDOWCREATOR_IID);

            // Get the window watcher service
            nsIWindowWatcher windowWatcher = (nsIWindowWatcher) serviceManager
                    .getServiceByContractID(
                            "@mozilla.org/embedcomp/window-watcher;1",
                            nsIWindowWatcher.NS_IWINDOWWATCHER_IID);

            // Set the window creator (from step 6)
            windowWatcher.setWindowCreator(windowCreator);

            // Create the root XUL window:
            nsIDOMWindow win = windowWatcher.openWindow(null,
                    "chrome://your-app/content/window.xul", "mywindow",
                    "chrome,resizable,centerscreen", null);

            // Set this as the active window
            windowWatcher.setActiveWindow(win);

            // Hand over the application to xpcom/xul, this will block:
            appStartup.run();

        } catch (FileNotFoundException e) {
            // this exception is thrown if greGREPathWithProperties cannot find
            // a GRE
        } catch (XPCOMException e) {
            // this exception is thrown if initEmbedding failed
        }

    }
}

I can see that the correct xulrunner is found and the LocationProvider.getFile() is being called.  Obviously the url "chrome://your-app/content/window.xul" should be replaced with something real.  But no matter what I try nothing happens.  I don't see any window popping up.  I'm on Mac OS X and have not tried this on Windows.  Has anyone ever got this to work following the instructions?

Thanks for your  help!

J.J. Zhuang