package my.Browser;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.EtchedBorder;
import org.jdesktop.jdic.browser.*;public class Urls {
 private String startUrl; // 开始采集网址 String urlContent; String ContentArea; private String strAreaBegin, strAreaEnd; // 采集区域开始采集字符串和结束采集字符串 @SuppressWarnings("unused")
private String stringInUrl, stringNotInUrl; String strContent;// 获得的采集内容 String[] allUrls; // 采集到的所有网址 private String regex; // 采集规则// UrlAndTitle urlAndTitle = new UrlAndTitle(); // 存储网址和标题 JFrame Zhankaiframe;
 JPanel jTianchong1 = new JPanel();
  JButton jButton1 = new JButton();
  JPanel Panel1 = new JPanel();
  JPanel Panel2 = new JPanel();
 int j=0;
 String[] buff=new String[50];
WebBrowser Browser1 = null;
       WebBrowser Browser2=null;
 public static void main(String[] args)
 {
     
    //int j=0;
  Urls myurl = new Urls("<body", "/body>");
  myurl.getStartUrl("http://www.baidu.com/");
  myurl.getUrlContent();
  myurl.getContentArea();
  myurl.getStringInUrl("http://www.baidu.com/");
  myurl.getStringNotInUrl("google");
  myurl.ShowUrls();//获取超链接的网址    ShowUrls()是方法
  myurl.Kuangjia();
  myurl.Twoweb();
 } // 初始化构造函数 strAreaBegin 和strAreaEnd public Urls(String strAreaBegin, String strAreaEnd) {
  this.strAreaBegin = strAreaBegin;//"<body"
  this.strAreaEnd = strAreaEnd;// "/body>"
  
 }//把www.baidu.com上所有超链接存到buff[i]中
 public void ShowUrls()
 {
     //String[] buff=new String[50];
     int i=0;//j是网页中url的个数
  
  final String regex = "<a.*?/a>";//<a开始  /a>结束   *?代表中间出现0次1次或多次
 
  final Pattern pt = Pattern.compile(regex);
  final Matcher mt = pt.matcher(ContentArea);
  while (mt.find()) {//public boolean find() 尝试查找与该模式匹配的输入序列的下一个子序列。
   
   // 获取标题
   final Matcher title = Pattern.compile(">.*?</a>").matcher(mt.group());
   while (title.find()) {
    
  String biaoti=title.group().replaceAll(">|</a>|&nbsp;", "");
   }   // 获取网址
   String mm="(http|ftp|https):\\/\\/[\\w\\-_]+(\\.[\\w\\-_]+)+([\\w\\-\\.,@?^=%&amp;:/~\\+#]*[\\w\\-\\@?^=%&amp;/~\\+#])?";
   final Matcher myurl = Pattern.compile(mm).matcher(mt.group());//匹配"href="到“>”间的内容,即网址
   while (myurl.find()) {
  
  String chaolianjie=  myurl.group().replaceAll("href=|>", ""); 
 
    buff[i]=chaolianjie;
    
    i++;
    
   }               
 
    } 
    
  
 }
//初始化框架 
public void Kuangjia(){
      
  Zhankaiframe= new JFrame("NUPT WDQ WEBBROWSER  展开");  
  Zhankaiframe.setSize(900,900);
  BorderLayout borderLayout1 = new BorderLayout();
 
  jTianchong1.setLayout(new BorderLayout());
        jTianchong1.setPreferredSize(new Dimension(40, 40));
        Zhankaiframe.add(jTianchong1, BorderLayout.NORTH);
 
  jButton1.setBorder(BorderFactory.createCompoundBorder(new EmptyBorder(0,
                2, 0, 2),
                new EtchedBorder()));
        jButton1.setMaximumSize(new Dimension(60, 25));
        jButton1.setMinimumSize(new Dimension(60, 25));
        jButton1.setPreferredSize(new Dimension(70, 50));
        jButton1.setToolTipText("显示下两个超链接");
        jButton1.setText("NEXT");
        jButton1.setEnabled(true);
        jTianchong1.setBorder(BorderFactory.createCompoundBorder(
            BorderFactory.createEtchedBorder(),
            BorderFactory.createEmptyBorder(2, 0, 2, 0)));
        jTianchong1.add(jButton1, BorderLayout.EAST);
//按键触发     
 jButton1.addActionListener(new ActionListener()
        {
           public void actionPerformed(ActionEvent e)
           {
               Twoweb(); 
           }
        });
  
        Panel1.setLayout(new BorderLayout(1,1));
        Panel1.setPreferredSize(new Dimension(300, 300));
        
        Panel2.setLayout(new BorderLayout(1,1));
        Panel2.setPreferredSize(new Dimension(300, 300));
        //Zhankaiframe.add(Panel1, BorderLayout.CENTER);
        //Zhankaiframe.add(Panel2, BorderLayout.SOUTH);
        //Panel1.add(Browser1, BorderLayout.CENTER); 
        //Panel2.add(Browser2, BorderLayout.CENTER);
  //Zhankaiframe.add(Panel2, BorderLayout.CENTER);
 // Zhankaiframe.setVisible(true);
 }
 
 //打开两个网页public void Twoweb(){
    
    Panel1.removeAll();
    Panel2.removeAll();
    //Panel1.resize(300,300);
  // System.out.println("remove");
       
       URL curUrl = null;
       URL curUrl2 = null;
 
 try{
     
        curUrl= new URL(buff[j]);
       curUrl2= new URL(buff[j+1]);
        Browser1=new WebBrowser(curUrl);
        Browser2 = new WebBrowser(curUrl2);
       // Panel1.setLayout(new BorderLayout(1,1));
        //Panel1.setPreferredSize(new Dimension(300, 300));
        
       // Panel2.setLayout(new BorderLayout(1,1));
        //Panel2.setPreferredSize(new Dimension(300, 300));
        Panel1.add(Browser1, BorderLayout.CENTER); 
        Panel2.add(Browser2, BorderLayout.CENTER);
       
        j=j+2;
        System.out.println(j);
       }catch (Exception e){
      System.out.println("wrong");
       System.out.println(e.toString());
  }
 Zhankaiframe.add(Panel1, BorderLayout.CENTER);
  Zhankaiframe.add(Panel2, BorderLayout.SOUTH);
  
  Zhankaiframe.setVisible(true);
  //System.out.println(buff[j]);
}
 // 获得开始采集网址
 public void getStartUrl(String startUrl)
 {
  this.startUrl = startUrl;//http://www.baidu.com/  是startUrl
 } // 获得网址所在内容;
 public void getUrlContent()
 {  StringBuffer is = new StringBuffer();
  try {
   URL myUrl = new URL(startUrl);//java.net
   BufferedReader br = new BufferedReader(new InputStreamReader(myUrl
     .openStream())); //java.io从字符输入流中读取文本  //java.io  字节流通向字符流的桥梁
     
   String s;
   while ((s = br.readLine()) != null) {
    is.append(s);
   }
   urlContent = is.toString();//url内容  toString返回此序列中数据的字符串表示形式
  } catch (Exception e)  {
   System.out.println("网址文件未能输出");
   e.printStackTrace();
  } } // 获得网址所在的匹配区域部分
 public void getContentArea()
 {
  int pos1 = 0, pos2 = 0;
  pos1 = urlContent.indexOf(strAreaBegin) + strAreaBegin.length();//indexOf返回"<body"在urlContent中第一次出现处的索引
  pos2 = urlContent.indexOf(strAreaEnd, pos1);//从pos1处开始,返回第一次出现的"/<body"在urlContent中的索引
  ContentArea = urlContent.substring(pos1, pos2);//返回一个新字符串,它是urlContent的一个子字符串。该子字符串从指定的 pos1 处开始,一直到索引 pos2- 1 处的字符。
 }                                          //ContentArea是"<body"到"/<body"间的字符串   // 以下两个函数获得网址应该要包含的关键字及不能包含的关键字 public void getStringInUrl(String stringInUrl)
 {
  this.stringInUrl = stringInUrl;//"http://www.baidu.com/" } public void getStringNotInUrl(String stringNotInUrl)
 {
  this.stringNotInUrl = stringNotInUrl;
 }
}
 打开网页java

解决方案 »

  1.   

    不用每次都new WebBrowser()吧  改地址就行如果是现在这样  你remove后再add是不变的  你试试调用一下repaint();或者点击按钮那个代码的最后边加上
    Urls.this.setVisible(false);
    Urls.this.setVisible(true);
    达到刷新的效果
      

  2.   

    我改成webower.setURL( ),程序将panel清空后弹出一个窗口,内存,,,,不能read错误
    请问这是为什么呢??
      

  3.   

    我改成webower.setURL( ),程序将 panel清空后弹出一个窗口,内 存,,,,不能read错误 请问这是为什么呢??