<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里冰封
    JAVA 濃香四溢
    posts - 151,comments - 2801,trackbacks - 0
    使用VC,VB或者C#的開(kāi)發(fā)者們對(duì)于在程序里面嵌入一個(gè)網(wǎng)頁(yè)來(lái)說(shuō),那真是小事一樁。但是在JAVA里面,卻幾乎是不可能實(shí)現(xiàn)的任務(wù)。JEditorPane雖然說(shuō)可以打開(kāi)網(wǎng)頁(yè),但是它那解析速度以及解析質(zhì)量,對(duì)于今天日益復(fù)雜的網(wǎng)頁(yè)內(nèi)容來(lái)說(shuō),就像沒(méi)有一樣。今天我們就使用一個(gè)開(kāi)源的組件(jdic)來(lái)實(shí)現(xiàn)在JAVA程序里面嵌入網(wǎng)頁(yè)的效率,運(yùn)行界面如下:



    下面言歸正轉(zhuǎn)吧,我們來(lái)介紹一下這個(gè)開(kāi)源的組件,它的名字叫JDIC(JDesktop Integration Components),網(wǎng)址為:https://jdic.dev.java.net/,它提供了一種訪問(wèn)桌面組件的API,其中JDK6.0就采納了其中了一些,比如系統(tǒng)欄圖標(biāo)的SystemTray和SystemIcon,還有代表桌面的Desktop等等,可見(jiàn)這個(gè)API是挺不錯(cuò)的。由于網(wǎng)頁(yè)瀏覽器的特殊性,標(biāo)準(zhǔn)的JDK并沒(méi)有把它加入進(jìn)來(lái),但是我們一樣可以下載它來(lái)使用這個(gè)功能。明顯地,這個(gè)功能是用本地方法實(shí)現(xiàn)的,所以下載完以后,把jdic.dll放到我們的path目錄中,比如system32文件夾下面,然后我們就可以使用它的功能從而增加我們的JAVA程序了。

    上面的例子代碼如下:
    /*
     * Test1.java
     *
     * Created on 2007-10-2, 17:29:30
     *
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     
    */

    package test2;

    import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.net.MalformedURLException;
    import java.net.URL;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JTextField;
    import org.jdesktop.jdic.browser.IWebBrowser;
    import org.jdesktop.jdic.browser.WebBrowser;
    import org.jdesktop.jdic.browser.WebBrowserEvent;
    import org.jdesktop.jdic.browser.WebBrowserListenerAdapter;

    /**
     *
     * 
    @author hadeslee
     
    */
    public class Test1 extends JPanel implements ActionListener {

        
    private JTextField input;
        
    private JButton go;
        
    private IWebBrowser web;

        
    public Test1() {
            
    super(new BorderLayout());
            initWindow();
        }

        
    private void initWindow() {
            
    try {
                web 
    = new WebBrowser();
                web.addWebBrowserListener(
    new MyListener());
                go 
    = new JButton("轉(zhuǎn)到");
                input 
    = new JTextField();
                JPanel up 
    = new JPanel(new BorderLayout());
                up.add(input, BorderLayout.CENTER);
                up.add(go, BorderLayout.EAST);
                
    this.add(up, BorderLayout.NORTH);
                
    this.add(web.asComponent(), BorderLayout.CENTER);
                input.addActionListener(
    this);
                go.addActionListener(
    this);
            } 
    catch (Exception ex) {
                Logger.getLogger(Test1.
    class.getName()).log(Level.SEVERE, null, ex);
            }
            JFrame jf 
    = new JFrame("JAVA瀏覽器");
            jf.add(
    this, BorderLayout.CENTER);
            jf.setSize(
    500300);
            jf.setLocationRelativeTo(
    null);
            jf.setVisible(
    true);
            jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }

        
    public void actionPerformed(ActionEvent ae) {
            doOpen();
        }

        
    private void doOpen() {
            
    try {
                String text 
    = input.getText();
                
    if (text == null || text.equals("")) {
                    
    return;
                }
                
    if (!text.toLowerCase().startsWith("http://")) {
                    text 
    = "http://" + text;
                }
                web.setURL(
    new URL(text));
            } 
    catch (MalformedURLException ex) {
                Logger.getLogger(Test1.
    class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        
    public static void main(String[] args) {
            
    new Test1();
        }

        
    private class MyListener extends WebBrowserListenerAdapter {

            
    private MyListener() {
            }

            @Override
            
    public void documentCompleted(WebBrowserEvent arg0) {
                System.out.println(
    "文檔下載完。。。");
                web.executeScript(
    "alert('文檔下載完畢!')");
    //            web.setContent("<html><H1>Hello world!!<H1>" +
    //                    "<a href=http://www.google.cn>點(diǎn)我</a></html>");
    //            web.removeWebBrowserListener(this);
            }
        }
    }

    它比一般的別的實(shí)現(xiàn)好的地方就是,它可以很完全地和JAVA代碼進(jìn)行交互,包括瀏覽器事件的監(jiān)聽(tīng),瀏覽器內(nèi)容的獲取,以及自己調(diào)用瀏覽器來(lái)執(zhí)行一段javasript,這些都是很強(qiáng)大并且很實(shí)用的功能。
    怎么樣,這下滿足了一下我們把網(wǎng)頁(yè)嵌入到JAVA程序中的愿望了吧。




    盡管千里冰封
    依然擁有晴空

    你我共同品味JAVA的濃香.
    posted on 2007-10-03 08:55 千里冰封 閱讀(13702) 評(píng)論(15)  編輯  收藏 所屬分類(lèi): JAVA開(kāi)源

    FeedBack:
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-03 10:16 | 翔南
    這個(gè)組件真的很NICE!!
    能不能再詳細(xì)介紹點(diǎn)訪問(wèn)桌面組件的相關(guān)內(nèi)容捏!!~~
    嘿嘿 謝謝哈  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-03 10:27 | 千里冰封
    以后我會(huì)再介紹一些很實(shí)用,但是JAVA沒(méi)有實(shí)現(xiàn)的功能  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器[未登錄](méi)
    2007-10-03 10:49 | 咖啡
    用過(guò)eclipse吧。在例子里面有用swt編的一個(gè)瀏覽器。  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-03 14:59 | Unmi
    用過(guò)eclipse就知道swt中可以嵌入IE或NetScape內(nèi)核瀏覽網(wǎng)頁(yè),可以把這部分組件他離出來(lái)用的  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-03 15:37 | 千里冰封
    但是SWT的太過(guò)于龐大了,SWING才是GUI開(kāi)發(fā)首用的  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-04 09:29 | Matthew Chen
    @千里冰封
    其實(shí)無(wú)論jdic,還是java6里采用的方式,抑或swt,本質(zhì)都是jni的方式去解決這一問(wèn)題,然后跨平臺(tái)實(shí)現(xiàn)了。比起swt,swing才是真正的龐大,當(dāng)然這也體現(xiàn)了它功能的強(qiáng)大以及速度的相對(duì)延遲,說(shuō)道gui開(kāi)發(fā)的首選,如果項(xiàng)目設(shè)計(jì)了和本地操作系統(tǒng)相關(guān)的,就好比這個(gè)瀏覽器,完全可以用swt了,畢竟它多少還是有跨平臺(tái)支持的。  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-04 11:06 | BeanSoft
    我在 RedHat 9 中文下試 SWT 的 Browser 控件失敗, 各位有何良策啊? 好像要額外裝一個(gè) Mozilla 的調(diào)試包. 本來(lái)想做 Code Manager .SWT Linux 版本的, 這下完蛋了. 也許別的系統(tǒng)能用.

    http://html.xamjwg.org/java-browser.jsp 這有個(gè)純 Java 的瀏覽器, 厲害啊, 開(kāi)源的.
    Lobo (previously known as Warrior) is an open source web browser that is written completely in Java. It is undergoing active development with the aim to fully support HTML 4, Javascript and CSS2.

    下載試了一下, 還行, 沒(méi)深入. 純 Java 的如果想定制就容易多了.  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-04 11:39 | 千里冰封
    相對(duì)SWING來(lái)說(shuō),SWT的跨平臺(tái)就說(shuō)得有些牽強(qiáng)了些,并且如果用SWING寫(xiě)應(yīng)用的話,程序發(fā)布的時(shí)候是不需要附帶任何第三方JAR的,可是用SWT不但要帶JAR還要帶DLL一起發(fā)布,呵呵,最好還是用標(biāo)準(zhǔn)的SWING的實(shí)現(xiàn),畢竟它是標(biāo)準(zhǔn)API的一部份,并且性能的提升也是有目共睹的。:)  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器[未登錄](méi)
    2007-10-04 19:07 | NeedJava
    比較同意樓主千里冰封的觀點(diǎn),如果純粹要速度的話,我只會(huì)用C/C++而不會(huì)用SWT的。

      回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2007-10-08 15:15 | origo
    我覺(jué)得多一個(gè)dll是不是與跨平臺(tái)相背離了  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2008-01-14 16:35 | cooc
    為什么我的JDIC包里沒(méi)

    import org.jdesktop.jdic.browser.IWebBrowser;

    這個(gè)類(lèi)呢

      回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2008-02-29 16:12 | gembin
    Eclipse RCP 不錯(cuò)!  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2008-05-15 21:42 |
    @cooc
    我的jdic怎么也沒(méi)有org.jdesktop.jdic.browser.IWebBrowser呢  回復(fù)  更多評(píng)論
      
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    2008-08-02 10:39 | cozl
    # re: JAVA網(wǎng)頁(yè)瀏覽器
    主站蜘蛛池模板: 亚洲国产成人无码AV在线| 久久久青草青青国产亚洲免观| 久久午夜伦鲁片免费无码| 久久免费香蕉视频| 好男人资源在线WWW免费| caoporm超免费公开视频| 国产成人精品免费视频大全| 又硬又粗又长又爽免费看| 性生大片视频免费观看一级| 未满十八私人高清免费影院| 精品免费久久久久国产一区| a级毛片免费全部播放无码| 国产综合免费精品久久久| 国产免费一区二区视频| 久久国产精品免费专区| 在线观看免费视频资源| 91在线视频免费91| 四虎www免费人成| 亚洲国产日韩成人综合天堂| 国产AV无码专区亚洲AV漫画| 亚洲AV无码专区国产乱码4SE | 美女视频黄a视频全免费网站色窝| 中国一级毛片免费看视频| 日韩电影免费在线观看| **实干一级毛片aa免费| 妞干网免费观看视频| 日韩精品成人亚洲专区| 亚洲精品无码乱码成人| 亚洲最大的视频网站| 亚洲狠狠婷婷综合久久蜜芽| 日韩在线视频播放免费视频完整版| 久久免费观看视频| h片在线免费观看| 国产在线98福利播放视频免费| 国产成人精品久久亚洲| 亚洲人成网址在线观看 | 亚洲av无码乱码在线观看野外 | 免费在线不卡视频| 亚洲AV日韩AV鸥美在线观看| 亚洲午夜精品在线| 免费在线观看一区|