Re: Having trouble with Embedding Mozilla
"J.J. Zhuang" <[email protected]> Wed, 11 Jul 2007 14:47:54 -0700 (PDT)
| Newsgroups | gmane.comp.mozilla.devel.java |
|---|---|
| Message-ID | <2053015419.484091184190474002.JavaMail.root__13918.8048233793$1184190765$gmane$org@dogfood.zimbra.com> |
An update on my question. I finally got it to work. Now the embedded mozilla can run my simple xul app just fine and a window can pop up. My question now becomes how I can access java classes from javascripts running in the embedded xul app? If I use java xpcom, will the xul app try to create another VM instance using java plugin? I certainly want the VM to be the same as the embedding VM. Thanks for any input you have! J.J. Zhuang ----- "J.J. Zhuang" <[email protected]> wrote: > 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