浅谈如何设计Java浏览器

开发 后端
使用VC,VB或者C#的开发者们对于在程序里面嵌入一个网页来说,那真是小事一桩。但是在JAVA里面,却几乎是不可能实现的任务。

在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浏览器的例子代码如下:

/*  
* 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("转到");  
   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(500, 300);  
  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>点我a>html>");  
   // web.removeWebBrowserListener(this);  
  }  
 }  
}   
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102.
  • 103.

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

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

【编辑推荐】

  1. Java连接MySQL中文乱码处理
  2. 在Java应用程序中使用Jfreechart配置
  3. Java虚拟机内部构成浅析
  4. 浅谈Java线程的生命周期
  5. 关于Java继承的一些复习
责任编辑:张燕妮 来源: yesky
相关推荐

2017-04-26 14:15:35

浏览器缓存机制

2017-05-02 09:25:13

浏览器指纹追踪虚拟化

2011-06-10 16:44:17

Qt 浏览器

2017-05-15 13:40:20

浏览器http缓存机制

2013-07-08 14:45:52

2011-08-29 14:27:33

QTWebkit浏览器

2012-03-20 11:31:58

移动浏览器

2012-03-19 17:25:22

2012-03-20 11:41:18

海豚浏览器

2013-11-18 14:42:53

浏览器渲染

2012-03-20 11:07:08

2012-06-21 15:38:02

猎豹浏览器

2010-04-05 21:57:14

Netscape浏览器

2011-09-09 18:43:13

Qt Webkit浏览器

2012-03-20 11:22:02

QQ手机浏览器

2012-03-19 17:17:00

移动浏览器欧朋

2022-03-24 08:31:25

Web性能优化浏览器缓存API封装

2012-03-20 11:35:32

傲游手机浏览器

2011-08-29 14:19:48

QtWebkit浏览器

2011-06-10 17:10:32

Qt GUI 浏览器
点赞
收藏

51CTO技术栈公众号