浅谈如何设计Java浏览器
创始人
2024-04-04 18:11:35
0

在Java中,虽然可以用JEditorPane打开网页,但是它那解析速度以及解析质量,对于今天日益复杂的网页内容来说,就像没有一样。今天我们就使用一个开源的组件(jdic)来实现在Java程序里面嵌入网页的效率。

下面言归正转吧,我们来介绍一下这个开源的组件,它的名字叫JDIC(JDesktop Integration Components),网址为:https://jdic.dev.java.net/,它提供了一种访问桌面组件的API,其中JDK6.0就采纳了其中了一些,比如系统栏图标的SystemTray和SystemIcon,还有代表桌面的Desktop等等,可见这个API是挺不错的。由于Java浏览器的特殊性,标准的JDK并没有把它加入进来,但是我们一样可以下载它来使用这个功能。明显地,这个功能是用本地方法实现的,所以下载完以后,把jdic.dll放到我们的path目录中,比如system32文件夹下面,然后我们就可以使用它的功能从而增加我们的Java程序了。

Java浏览器的例子代码如下:

  1. /*  
  2. * Test1.java  
  3. *  
  4. * Created on 2007-10-2, 17:29:30  
  5. *  
  6. * To change this template, choose Tools | Templates  
  7. * and open the template in the editor.  
  8. */  
  9.  
  10. package test2;  
  11.  
  12. import java.awt.BorderLayout;  
  13. import java.awt.event.ActionEvent;  
  14. import java.awt.event.ActionListener;  
  15. import java.net.MalformedURLException;  
  16. import java.net.URL;  
  17. import java.util.logging.Level;  
  18. import java.util.logging.Logger;  
  19. import javax.swing.JButton;  
  20. import javax.swing.JFrame;  
  21. import javax.swing.JPanel;  
  22. import javax.swing.JTextField;  
  23. import org.jdesktop.jdic.browser.IWebBrowser;  
  24. import org.jdesktop.jdic.browser.WebBrowser;  
  25. import org.jdesktop.jdic.browser.WebBrowserEvent;  
  26. import org.jdesktop.jdic.browser.WebBrowserListenerAdapter;  
  27.  
  28. /**  
  29. *  
  30. * @author hadeslee  
  31. */  
  32. public class Test1 extends JPanel implements ActionListener {  
  33.  
  34.  private JTextField input;  
  35.  private JButton go;  
  36.  private IWebBrowser web;  
  37.  
  38.  public Test1() {  
  39.   super(new BorderLayout());  
  40.   initWindow();  
  41.  }  
  42.  
  43.  private void initWindow() {  
  44.   try {  
  45.    web = new WebBrowser();  
  46.    web.addWebBrowserListener(new MyListener());  
  47.    go = new JButton("转到");  
  48.    input = new JTextField();  
  49.    JPanel up = new JPanel(new BorderLayout());  
  50.    up.add(input, BorderLayout.CENTER);  
  51.    up.add(go, BorderLayout.EAST);  
  52.    this.add(up, BorderLayout.NORTH);  
  53.    this.add(web.asComponent(), BorderLayout.CENTER);  
  54.    input.addActionListener(this);  
  55.    go.addActionListener(this);  
  56.   } catch (Exception ex) {  
  57.    Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);  
  58.   }  
  59.   JFrame jf = new JFrame("JAVA浏览器");  
  60.   jf.add(this, BorderLayout.CENTER);  
  61.   jf.setSize(500, 300);  
  62.   jf.setLocationRelativeTo(null);  
  63.   jf.setVisible(true);  
  64.   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  
  65.  }  
  66.  
  67.  public void actionPerformed(ActionEvent ae) {  
  68.   doOpen();  
  69.  }  
  70.  
  71.  private void doOpen() {  
  72.   try {  
  73.    String text = input.getText();  
  74.    if (text == null || text.equals("")) {  
  75.     return;  
  76.    }  
  77.    if (!text.toLowerCase().startsWith("http://")) {  
  78.     text = "http://" + text;  
  79.    }  
  80.    web.setURL(new URL(text));  
  81.   } catch (MalformedURLException ex) {  
  82.    Logger.getLogger(Test1.class.getName()).log(Level.SEVERE, null, ex);  
  83.   }  
  84.  }  
  85.  
  86.  public static void main(String[] args) {  
  87.   new Test1();  
  88.  }  
  89.  
  90.  private class MyListener extends WebBrowserListenerAdapter {  
  91.  
  92.   private MyListener() {}  
  93.  
  94.   @Override  
  95.   public void documentCompleted(WebBrowserEvent arg0) {  
  96.    System.out.println("文档下载完。。。");  
  97.    web.executeScript("alert('文档下载完毕!')");  
  98.    // web.setContent("

    Hello world!!

    " +  
  99.    // " href=http://www.google.cn>点我a>html>");  
  100.    // web.removeWebBrowserListener(this);  
  101.   }  
  102.  }  
  103. }   

它比一般的别的实现好的地方就是,它可以很完全地和Java代码进行交互,包括浏览器事件的监听,浏览器内容的获取,以及自己调用浏览器来执行一段javasript,这些都是很强大并且很实用的功能。

怎么样,这下满足了一下我们把网页嵌入到Java程序中的愿望了吧。

【编辑推荐】

  1. Java连接MySQL中文乱码处理
  2. 在Java应用程序中使用Jfreechart配置
  3. Java虚拟机内部构成浅析
  4. 浅谈Java线程的生命周期
  5. 关于Java继承的一些复习

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...