`
ljl_xyf
  • 浏览: 633932 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

XULRunner with Java: JavaXPCOM Tutorial 2

阅读更多
    package es.ladyr.javaxpcom.browser;  
    import org.eclipse.swt.SWT;  
    import org.eclipse.swt.browser.ProgressEvent;  
    import org.eclipse.swt.browser.ProgressListener;  
    import org.eclipse.swt.widgets.Display;  
    import org.eclipse.swt.widgets.Shell;  
    import org.mozilla.interfaces.*;  
    import org.eclipse.swt.browser.Browser;  
    import org.eclipse.swt.SWTError;  
    public class SimpleBrowser {  
            public static void main(String args[]) {  
                     
                    final Browser browser;  
                    Display display = new Display();  
                    Shell shell = new Shell(display);  
                    shell.setSize(800, 600);  
                    shell.open();  
                     
                    //Initiating the browser using SWT  
                    try {  
                                    browser = new Browser(shell, SWT.MOZILLA);  
                            } catch (SWTError e) {  
                                    System.out.println("Could not instantiate Browser: " + e.getMessage());  
                                    return;  
                            }  
                     
                    
                     
                    // Adapt browser size to shell size  
                    browser.setBounds(shell.getClientArea());  
                    // Load an URL into the web browser  
                    browser.setUrl("http://www.google.com");  
                     
                    // Listens for page loading status.  
                    browser.addProgressListener(new ProgressListener() {  
                            public void changed(ProgressEvent event) {  
                            }  
                            public void completed(ProgressEvent event) {  
                                    nsIWebBrowser webBrowser = (nsIWebBrowser)browser.getWebBrowser();  
                                    nsIDOMWindow window = webBrowser.getContentDOMWindow();  
                                    nsIDOMDocument document = window.getDocument();  
                                    System.out.println(document);  
                            }  
                    });  
                    while (!shell.isDisposed()) {  
                            if (!display.readAndDispatch()) {  
                                    display.sleep();  
                            }  
                    }  
            }  
    }  
 

4 在java代码里嵌入Firefox3
  现在可以去用一下有用的例子了。首先我们在一个java程序里使用SWT来嵌入一个Mozilla浏览器。现在,我们可以使用

org.eclipse.swt.browser.Browser类来实例化:browser = new Browser(shell, SWT.MOZILLA); 在这之前,我们需要使用ATF项目

,以及一下ATF插件。非常幸运,现在我们不需要这些补丁了。

4.1 配置环境
  为了在java程序里嵌入Mozilla浏览器,我们需要使用SWT来创建窗口和嵌入浏览器。
  4.1.1 安装swt
   下载对应操作系统的swt,加到classpath就好了
  4.1.2 配置swt
   运行后面例子需要的jar包:
   javaxpcom.jar
   MozillaInterfaces.jar
   MozillaGlue.jar
   swt.jar
   src.zip

4.2 Web Browser例子

 


接下来,我们将增加一下SWT widgets来实现通常的交换,比如输入url,前进与后退,菜单,和两种类型:
  传入一个参数制定XULRunner的路径
  不传入参数使用系统安装的XULRunner

    package es.ladyr.javaxpcom.browser;  
    import java.io.IOException;  
    import java.io.InputStream;  
    import org.eclipse.swt.SWT;  
    import org.eclipse.swt.browser.Browser;  
    import org.eclipse.swt.browser.ProgressEvent;  
    import org.eclipse.swt.browser.ProgressListener;  
    import org.eclipse.swt.events.SelectionAdapter;  
    import org.eclipse.swt.events.SelectionEvent;  
    import org.eclipse.swt.events.SelectionListener;  
    import org.eclipse.swt.graphics.Image;  
    import org.eclipse.swt.graphics.ImageData;  
    import org.eclipse.swt.layout.GridData;  
    import org.eclipse.swt.layout.GridLayout;  
    import org.eclipse.swt.widgets.Canvas;  
    import org.eclipse.swt.widgets.Combo;  
    import org.eclipse.swt.widgets.Display;  
    import org.eclipse.swt.widgets.Menu;  
    import org.eclipse.swt.widgets.MenuItem;  
    import org.eclipse.swt.widgets.Shell;  
    import org.eclipse.swt.widgets.ToolBar;  
    import org.eclipse.swt.widgets.ToolItem;  
    public class LadyrBrowser {  
            private static final int WIDTH = 800;  
            private static final int HEIGHT = 600;  
             
            Browser browser;  
            private Combo uriCombo;  
            private final ToolItem backItem;  
            private final ToolItem forwardItem;  
            /** 
             * 
             * @param xulrunnerPath if you have a XULRunner valid version in your system, but not 
             *      installed, you can use that version to run the browser. This param must contain 
             *      its path, or null in other case. 
             */  
            public LadyrBrowser(String xulrunnerPath) {  
                    Display display = new Display();  
                    Shell shell = new Shell(display);  
                    shell.setSize(WIDTH, HEIGHT);  
                     
                     
                    GridLayout gridLayout = new GridLayout(1, true);  
                    shell.setLayout(gridLayout);  
                    // Set the menu bar  
                    // create the menu  
                    Menu menuBar = new Menu(shell, SWT.BAR);  
                    // create a file menu and add an exit item  
                    final MenuItem file = new MenuItem(menuBar, SWT.CASCADE);  
                    file.setText("&File");  
                    final Menu filemenu = new Menu(shell, SWT.DROP_DOWN);  
                    file.setMenu(filemenu);  
                    final MenuItem exitMenuItem = new MenuItem(filemenu, SWT.PUSH);  
                    exitMenuItem.setText("&Exit/tCTRL+E");  
                    exitMenuItem.setAccelerator(SWT.CTRL + 'E');  
                    exitMenuItem.addSelectionListener(new SelectionAdapter() {  
                            public void widgetSelected(SelectionEvent event) {  
                                    System.exit(0);  
                            }  
                    });  
                    // create a Help menu and add an about item  
                    final MenuItem helpMenuItem = new MenuItem(menuBar, SWT.CASCADE);  
                    helpMenuItem.setText("&Help");  
                    final Menu helpmenu = new Menu(shell, SWT.DROP_DOWN);  
                    helpMenuItem.setMenu(helpmenu);  
                    final MenuItem aboutMenuItem = new MenuItem(helpmenu, SWT.PUSH);  
                    aboutMenuItem.setText("&About");  
                    shell.setMenuBar(menuBar);  
                    // Set the toolbar  
                    ToolBar toolbar = new ToolBar(shell, SWT.FLAT);  
                    backItem = new ToolItem(toolbar, SWT.PUSH);  
                    backItem.setImage(getImage("resources/back.png"));  
                    backItem.setEnabled(false);  
                    forwardItem = new ToolItem(toolbar, SWT.PUSH);  
                    forwardItem.setImage(getImage("resources/forward.png"));  
                    forwardItem.setEnabled(false);  
                    backItem.addSelectionListener(new SelectionAdapter() {  
                            public void widgetSelected(SelectionEvent event) {  
                                    if (browser.isBackEnabled()) {  
                                            browser.back();  
                                    }  
                            }  
                    });  
                    forwardItem.addSelectionListener(new SelectionAdapter() {  
                            public void widgetSelected(SelectionEvent event) {  
                                    if (browser.isForwardEnabled()) {  
                                            browser.forward();  
                                    }  
                            }  
                    });  
                    final ToolItem refreshItem = new ToolItem(toolbar, SWT.PUSH);  
                    refreshItem.setImage(getImage("resources/refresh.png"));  
                    refreshItem.addSelectionListener(new SelectionAdapter() {  
                            public void widgetSelected(SelectionEvent event) {  
                                    browser.refresh();  
                            }  
                    });  
                    final ToolItem stopItem = new ToolItem(toolbar, SWT.PUSH);  
                    stopItem.setImage(getImage("resources/stop.png"));  
                    stopItem.addSelectionListener(new SelectionAdapter() {  
                            public void widgetSelected(SelectionEvent event) {  
                                    browser.stop();  
                            }  
                    });  
                    uriCombo = new Combo(toolbar, SWT.NONE);  
                    uriCombo.setItems(new String[] { "www.ladyr.com", "www.urjc.es",  
                                    "www.mozilla.org" });  
                    uriCombo.setText("http://www.google.es");  
                    uriCombo.setBounds(0, 0, 3 * (WIDTH / 4), 0);  
                    uriCombo.addSelectionListener(new SelectionListener() {  
                            public void widgetSelected(SelectionEvent e) {  
                                    Combo c = (Combo) e.widget;  
                                    browser.setUrl(c.getText());  
                                    System.out.println(c.getText());  
                            }  
                            public void widgetDefaultSelected(SelectionEvent e) {  
                                    Combo c = (Combo) e.widget;  
                                    browser.setUrl(c.getText());  
                                    System.out.println(c.getText());  
                            }  
                    });  
                    final ToolItem uriComboItem = new ToolItem(toolbar, SWT.SEPARATOR);  
                    uriComboItem.setWidth(uriCombo.getSize().x);  
                    uriComboItem.setControl(uriCombo);  
                    final ToolItem goItem = new ToolItem(toolbar, SWT.PUSH);  
                    goItem.setImage(getImage("resources/go.png"));  
                    goItem.addSelectionListener(new SelectionAdapter() {  
                            public void widgetSelected(SelectionEvent event) {  
                                    browser.setUrl(uriCombo.getText());  
                            }  
                    });  
                    GridData data = new GridData();  
                    data.horizontalAlignment = SWT.FILL;  
                    toolbar.setLayoutData(data);  
                    toolbar.pack();  
                    // Set the page visualization area  
                    Canvas canvas = new Canvas(shell, SWT.BORDER);  
                    data = new GridData();  
                    // Set the same dimensions than shell, after we will call pack method  
                    // to fit the canvas size to the shell size.  
                    data.horizontalAlignment = SWT.FILL;  
                    data.verticalAlignment = SWT.FILL;  
                    data.widthHint = WIDTH;  
                    data.heightHint = HEIGHT;  
                    canvas.setLayoutData(data);  
                    shell.pack();  
                    shell.open();  
                    // Browser code  
                    initMozillaBrowser(uriCombo.getText(), canvas, xulrunnerPath);  
                    // End of browser code  
                    while (!shell.isDisposed()) {  
                            if (!display.readAndDispatch()) {  
                                    display.sleep();  
                            }  
                    }  
                    display.dispose();  
            }  
            /** 
             * 
             * @param uri 
             * @param canvas 
             * @param xulrunnerPath if you have a XULRunner valid version in your system, but not 
             *      installed, you can use that version to run the browser. This param must contain 
             *      its path, or null in other case. 
             */  
            private void initMozillaBrowser(String uri, Canvas canvas,  
                            String xulrunnerPath) {  
                    browser = new Browser(canvas, SWT.MOZILLA);  
                //nsIWebBrowser webBrowser = (nsIWebBrowser)browser.getWebBrowser();  
                     
                    
                    browser.setBounds(canvas.getClientArea());  
                    browser.setUrl(uri);  
                    browser.addProgressListener(new ProgressListener() {  
                            public void changed(ProgressEvent event) {  
                                    uriCombo.setText(browser.getUrl());  
                                    updateToolItemsState();  
                            }  
                            public void completed(ProgressEvent event) {  
                                    updateToolItemsState();  
                            }  
                    });  
            }  
             
            
            private Image getImage(String path) {  
                    InputStream sourceStream = this.getClass().getResourceAsStream(path);  
                    ImageData source = new ImageData(sourceStream);  
                    Image image = new Image(null, source);  
                    try {  
                            sourceStream.close();  
                    } catch (IOException e) {  
                            e.printStackTrace();  
                    }  
                    return image;  
            }  
            private void updateToolItemsState() {  
                    if (!backItem.isEnabled() && browser.isBackEnabled()) {  
                            backItem.setEnabled(true);  
                    } else if (backItem.isEnabled() && !browser.isBackEnabled()) {  
                            backItem.setEnabled(false);  
                    }  
                    if (!forwardItem.isEnabled() && browser.isForwardEnabled()) {  
                            forwardItem.setEnabled(true);  
                    } else if (forwardItem.isEnabled() && !browser.isForwardEnabled()) {  
                            forwardItem.setEnabled(false);  
                    }  
            }  
            public static void main(String[] args) {  
                    if (args.length > 0) {  
                            new LadyrBrowser(args[0]);  
                    } else {  
                            new LadyrBrowser(null);  
                    }  
            }  
    }  
 


5. 在浏览器里访问JavaXPCOM
   这一节里我们将讨论一下通过WebBrowser访问的功能。比如,改变浏览器的属性或者观察浏览器请求与响应。
   首先我们改变用户的preferences
   注:我只列出增加的部分代码。

 

    public class SimpleBrowserWithPrefs {  
                  // Obtain preferences service  
                  String contractID = "@mozilla.org/preferences-service;1";  
                  nsIPrefService prefService = (nsIPrefService) serviceManager  
                                  .getServiceByContractID(contractID,  
                                                  nsIPrefService.NS_IPREFSERVICE_IID);  
                  // Get a branch to access to the entire preference tree  
                  nsIPrefBranch branch = prefService.getBranch("");  
                   
                  // Set some preferences  
                  // Warn before submitting a form to an insecure area ? -> False  
                  branch.setBoolPref("security.warn_submit_insecure", 0);  
                   
                  // Select direction of text:  
                  //   1 : Left-to-right  
                  //   2 : Right-to-left  
                  branch.setIntPref("bidi.direction", 2);  
                   
                  // Allow current document to specify colors to use?  
                  // (If false, background images will also not be loaded)  
                  branch.setBoolPref("browser.display.use_document_colors", 0);    
      
    }  
 


另外一下Service也能被使用。我们已经可以改变Mozilla的属性来改变浏览器的行为,但是通过利用Service我们可以完成更有用的

任务。在下面的例子里我们将观察浏览器的请求和响应。在XPCOM里存在一个接口叫nsIObserver,它运行观察一个topic相关的event

,只要它被添加到observer Service里了。添加的方法是使用 void nsIObserverService.addObserver(nsIObserver anObserver,

String aTopic, boolean ownsWeak) 这个方法对一个特定的topic注册一个listener。anObserver是用来接受通知的一个接口,

aTopic是通知的topic,ownsWeak当nsIObserverService hold anObserver的一个strong的引用时设为false,否则设置为true。因此

,为了创建一个observer,我们必需实现nsIObserver接口,这个接口包含了一个方法 public void observe(nsISupports

aSubject, String aTopic, String aData)。

下面的例子的4个步骤:
  1,获得Service Manager
  2,获得Observer Service
  3,创建一个简单的HTTP observer
  4,把这个observer添加到监听请求和响应的Service里

    package es.ladyr.javaxpcom.browser;  
      
    import org.eclipse.swt.SWT;  
    import org.eclipse.swt.SWTError;  
    import org.eclipse.swt.browser.Browser;  
    import org.eclipse.swt.browser.ProgressEvent;  
    import org.eclipse.swt.browser.ProgressListener;  
    import org.eclipse.swt.widgets.Display;  
    import org.eclipse.swt.widgets.Shell;  
    import org.mozilla.xpcom.Mozilla;  
    import org.mozilla.interfaces.*;  
      
    public class SimpleBrowserWithObserver {  
            public SimpleBrowserWithObserver(String xulrunnerPath) {  
           
                            final Browser browser;  
                            Display display = new Display();  
                    Shell shell = new Shell(display);  
                    shell.setSize(800, 600);  
                    shell.open();  
                    // If you have XULRunner installed, you can call the constructor without  
                    // the last parameter:  
                    //  
                    // final MozillaBrowser browser = new MozillaBrowser(shell,SWT.BORDER);  
                    //  
                    // That last parameter is the path for XULRunner files  
                    // (where you have uncompressed downloaded XULRunner package).  
                     
                    try {  
                                    browser = new Browser(shell, SWT.MOZILLA);  
                            } catch (SWTError e) {  
                                    System.out.println("Could not instantiate Browser: " + e.getMessage());  
                                    return;  
                            }  
                     
                    // Get ServiceManager  
                    nsIServiceManager serviceManager = Mozilla.getInstance().getServiceManager();  
                    // Get Observer Service  
                    nsIObserverService observerService = (nsIObserverService) serviceManager  
                                            .getServiceByContractID("@mozilla.org/observer-service;1",  
                                                            nsIObserverService.NS_IOBSERVERSERVICE_IID);  
                     
                    // Create a simple HTTP observer  
                    SimpleHTTPObserver httpObserver = new SimpleHTTPObserver();  
                     
                    // Add our observer to the service for listen to request and responses  
                    observerService.addObserver(httpObserver, "http-on-modify-request", false);  
                    observerService.addObserver(httpObserver, "http-on-examine-response", false);  
                     
                    // Adapt browser size to shell size  
                    browser.setBounds(shell.getClientArea());  
                    // Load an URL into the web browser  
                    browser.setUrl("http://www.google.com");  
                     
                    // Listens for page loading status.  
                    browser.addProgressListener(new ProgressListener() {  
                            public void changed(ProgressEvent event) {  
                            }  
                            public void completed(ProgressEvent event) {  
                                    nsIWebBrowser webBrowser = (nsIWebBrowser)browser.getWebBrowser();  
                                    if (webBrowser == null) {  
                                            System.out.println("Could not get the nsIWebBrowser from the Browser  
    widget");  
                                    }  
                                    nsIDOMWindow window = webBrowser.getContentDOMWindow();  
                                    nsIDOMDocument doc = window.getDocument();  
                                System.out.println(doc);  
                            }  
                    });  
                    while (!shell.isDisposed()) {  
                            if (!display.readAndDispatch()) {  
                                    display.sleep();  
                            }  
                    }  
                     
                    observerService.removeObserver(httpObserver, "http-on-modify-request");  
                     
            }  
             
            public static void main(String args[]) {  
                    String xulrunnerPath = null;  
                    if ( args.length > 0 ) {  
                            xulrunnerPath = args[0];  
                    }  
                     
                    new SimpleBrowserWithObserver(xulrunnerPath);  
            }  
             
            /** 
             * Simple HTTP observer listen to requests and responses. 
             * 
             * @author alpgarcia 
             * 
             */  
            class SimpleHTTPObserver implements nsIObserver {  
                     
                    private int nRequests = 0;  
                    private int nResponses = 0;  
                     
                    public void observe(nsISupports aSubject, String aTopic, String aData) {  
                             
                            // You can read corresponding javadoc for this method, here we have pasted  
                            // some interesting lines from there:  
                            //  
                            //    Observe will be called when there is a notification for the topic.  
                            //    This assumes that the object implementing this interface has been registered  
                            //    with an observer service such as the nsIObserverService.  
                            //    If you expect multiple topics/subjects, the impl is responsible for filtering.  
                            //  
                            //    You should not modify, add, remove, or enumerate notifications in the  
                            //    implemention of observe.  
                             
                             
                            // Get the channel for listen to from notification specific interface pointer.  
                            nsIHttpChannel httpChannel =  
                                    (nsIHttpChannel) aSubject.queryInterface(nsIHttpChannel.NS_IHTTPCHANNEL_IID);  
                             
                            // Our observer can listen to request or responses, it depends on the  
                            // notification topic or subject.  
                            if (aTopic.equals("http-on-modify-request")) {  
                     
                                    nRequests++;  
                                     
                                    System.out.println("/n---- BEGIN REQUEST NUMBER " + nRequests + " ----/n");  
                                     
                                    httpChannel.visitRequestHeaders(new nsIHttpHeaderVisitor() {  
                                            public void visitHeader(String header, String value) {  
                                                    System.out.println("Header: " + header + " -- Value: "  
                                                                    + value);  
                                            }  
                                            public nsISupports queryInterface(String arg0) {  
                                                    return null;  
                                            }  
                                    });  
                                     
                                    System.out.println("  Method: " + httpChannel.getRequestMethod());  
                                    System.out.println("  Name: " + httpChannel.getName());  
                                    System.out.println("  Host: " + getRequestHeader(httpChannel, "host"));  
                                    System.out.println("  User Agent: " + getRequestHeader(httpChannel, "user-agent"));  
                                    System.out.println("  Accept: " + httpChannel.getRequestHeader("accept"));  
                                    System.out.println("  Accept Language: " + getRequestHeader(httpChannel, "accept-  
    language"));  
                                    System.out.println("  Accept Encoding: " + getRequestHeader(httpChannel, "accept-  
    encoding"));  
                                    System.out.println("  Accept Charset: " + getRequestHeader(httpChannel, "accept-  
    charset"));  
                                    System.out.println("  Keep Alive: " + getRequestHeader(httpChannel, "keep-alive"));  
                                    System.out.println("  Connection: " + getRequestHeader(httpChannel, "connection"));  
                                    System.out.println("  Cookie: " + getRequestHeader(httpChannel, "cookie"));  
                                     
                                    System.out.println("/n---- END REQUEST NUMBER " + nRequests + " ----/n");  
                                     
                            } else if (aTopic.equals("http-on-examine-response")) {  
                                     
                                    nResponses++;  
                                    System.out.println("/n---- BEGIN RESPONSE NUMBER " + nResponses + " ----/n");  
                                     
                                    httpChannel.visitResponseHeaders(new nsIHttpHeaderVisitor() {  
                                            public void visitHeader(String header, String value) {  
                                                    System.out.println("Header: " + header + " -- Value: "  
                                                                    + value);  
                                            }  
                                            public nsISupports queryInterface(String arg0) {  
                                                    return null;  
                                            }  
                                    });  
                                    System.out.println("  Status: " + httpChannel.getResponseStatus());  
                                    System.out.println("  Status Text: " + httpChannel.getResponseStatusText());  
                                    System.out.println("  Content Type: " + httpChannel.getContentType());  
                                    System.out.println("  Content Length: " + httpChannel.getContentLength());  
                                    System.out.println("  Content Encoding: " + getResponseHeader(httpChannel, "content  
    -encoding"));  
                                    System.out.println("  Server: " + getResponseHeader(httpChannel, "server"));  
                                     
                                    System.out.println("/n---- END RESPONSE NUMBER " + nResponses + " ----/n");  
                                     
                            }  
                             
                    }  
                    public nsISupports queryInterface(String uuid) {  
                            return Mozilla.queryInterface(this, uuid);  
                    }  
                     
                    private String getRequestHeader(nsIHttpChannel httpChannel, String header) {  
                            try {  
                                    return httpChannel.getRequestHeader(header);  
                            } catch (Exception e) {  
                                    return "Header Not Found";  
                            }  
                    }  
                     
                    private String getResponseHeader(nsIHttpChannel httpChannel, String header) {  
                            try {  
                                    return httpChannel.getResponseHeader(header);  
                            } catch (Exception e) {  
                                    return "Header Not Found";  
                            }  
                    }  
                     
            }  
 
分享到:
评论

相关推荐

    xulrunner下载、安装、配置和实例

    2. **设置环境变量**:为了使系统能够识别并调用XULRunner,你需要将安装路径添加到系统环境变量`PATH`中。在Windows中,可以通过以下步骤操作: - 右键点击“我的电脑”或“此电脑”,选择“属性”。 - 在“高级...

    xulrunner-package:xulrunner deb包装

    该项目包含有助于破解脚本。 如何为Mer配置开发环境 用于嵌入式设备的Gecko引擎开发非常耗资源。 如果要尝试,最好有一台运行...# -*-mic2-options-*- --arch=armv7hl -*-mic2-options-*- lang en_US.UTF-8 keyboard u

    使用swing内嵌mozilla内核浏览器需要xulrunner

    2. **设置环境变量**:为了让Java应用能够找到XULRunner,你需要设置系统环境变量,指向XULRunner的安装目录。这通常涉及到`XULRUNNER_PATH`环境变量的设置。 3. **导入相关库**:在Java代码中,你需要引入必要的库...

    java内嵌火狐核心浏览器

    2. **集成到Java项目**:将XULRunner库添加到Java项目的类路径中,以便在运行时调用。 3. **编写Java代码**:使用特定的API,如XPCOM(交叉平台组件对象模型),与XULRunner进行交互,创建并控制浏览器窗口。 4. **...

    xulrunner-41.0.2.en-US.win32.sdk

    《XULRunner 41.0.2 SDK:构建NPAPI插件的基石》 XULRunner,全称为“XML User Interface Library Runner”,是Mozilla基金会开发的一个开源软件框架,主要用于运行使用XUL(XML User Interface Language)和其他...

    xulrunner-1.9.2.25-win64

    《XULRunner:Firefox浏览器内核的深度解析》 XULRunner,全称为“XML User Interface Library Runner”,是Mozilla基金会开发的一个开源软件框架,用于运行使用XUL(XML User Interface Language)界面描述语言...

    xulrunner-10.0.4esr.en-US.win32.zip

    XULRunner 10.0.4 ESR版本提供了稳定性和安全性,而DJNativeSwing则增强了Java应用在用户界面方面的表现。对于需要在Windows环境中开发或运行使用XUL和Swing技术的Java应用的开发者来说,这是一个必不可少的资源。

    xulrunner

    2. **应用配置**:开发者需要在应用程序中指定使用的XULRunner版本,这通常是通过设置环境变量或者配置文件实现的。 3. **应用程序开发**:使用XUL和JavaScript编写应用程序的界面和逻辑。XUL允许开发者用XML定义...

    xulrunner-9.0b4.en-US.win32

    2. **Firefox关联**:Firefox浏览器是XULRunner的主要应用场景,XULRunner为Firefox提供了运行时环境,包括渲染引擎、网络通信模块、安全组件等,使得Firefox能够独立于操作系统环境运行。 3. **Aptana Studio**:...

    xulrunner-1.9.2.en-US.win32.sdk

    2. **Runtime环境**:XULRunner作为一个运行时环境,负责解析和执行XUL文档,处理与用户交互,以及管理应用程序的生命周期。 3. **SDK组件**:XULRunner SDK包含头文件、库文件、示例代码、文档和构建工具,帮助...

    xulrunner-1.9.2.28pre.en-US.linux-x86_64.tar.rar

    org.eclipse.swt.SWTError: No more handles [MOZILLA_FIVE_HOME=''] (java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-mozilla-gtk-4335 in java.library.path no swt-mozilla-gtk ...

    GeckoFx 33.09版本源码加对应版本XULrunner

    2. **源码解析**: - 源码提供给了开发者深入理解GeckoFx的工作原理的机会,可以自定义功能、优化性能或者修复潜在问题。 - 开发者可以通过阅读源码学习如何与Gecko引擎交互,例如处理网络请求、解析DOM、执行...

    xulrunner-1.8.1.2pre.en-US.win32

    2. **Xulrunner**:作为运行时环境,Xulrunner提供了运行XUL应用程序的基础。它包含了渲染引擎、JavaScript引擎、网络组件以及其他必要的库,使得开发者无需关心底层操作系统细节即可运行XUL应用。 3. **Eclipse...

    xulrunner-31.6.0-2.el7.centos.i686.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    xulrunner-41.0.2.en-US.win32

    这个特定的版本号“41.0.2”表示这是XULRunner的一个更新版本,发布于某个时间点,主要针对Windows 32位操作系统。"en-US"表明这是英文(美国)版本。在这一版本中,可能包含了性能优化、安全修复和新特性的添加。...

    xulrunner-win64-1.9.2.25.rar

    《XULRunner-win64-1.9.2.25:Java Swing的视图化展示利器》 在IT行业中,XULRunner是一款至关重要的工具,尤其对于开发者来说,它提供了一个强大的平台来运行基于XUL(XML User Interface Language)的应用程序。...

    xulrunner 29.0版本

    2. **内置组件库**:XULRunner 包含了一整套用于处理图形、网络、存储、音频、视频等的组件,简化了应用程序的开发过程。 3. **XUL UI 构建**:通过 XUL,开发者可以使用 XML 描述用户界面,结合 CSS 进行样式控制...

    xulrunner-1.9.2.source.tar.bz2

    xulrunner-1.9.2.source.tar.bz2

    xulrunner-1.9.2

    xulrunner-1.9.2-gnome-support_1.9.2.17+build3+nobinonly-0ubuntu0.8.04.1_i386

    xulrunner-3.6.26.en-US.win32

    XULRunner是一个开源的软件运行环境,由Mozilla基金会开发,主要用于支持使用XUL(XML User Interface Language)构建的跨平台应用程序。XULRunner提供了一套完整的库和框架,使得开发者可以构建桌面应用,而无需...

Global site tag (gtag.js) - Google Analytics