Re: Having trouble with Embedding Mozilla

Greg Bowyer <[email protected]>
Newsgroups gmane.comp.mozilla.devel.oji
Message-ID <[email protected]>
No if you use the JavaXPCom route it will use the same VM as embedded 
XulRunner / Gecko.

Note that you need to generate both the interface, and the typelib (the 
xpt) for an xpcom component for Javascript to be able to consume it.

J.J. Zhuang wrote:
> 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
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.