日期:2014-05-20  浏览次数:20813 次

程序运行出错
有以下程序,功能是实现利用百度快照,将百度文库中的txt文件下载到本地。现在的问题是,程序运行后就死机。请高手帮我看看是怎么回事,谢谢了……
package DownloadWindow;

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.io.*;
import java.util.*;
import java.net.*;

import org.htmlparser.Node;
import org.htmlparser.NodeFilter;
import org.htmlparser.Parser;
import org.htmlparser.filters.*;
import org.htmlparser.util.NodeList;

public class DownloadWindow extends JFrame implements ActionListener{
static JTextArea jta;
Label label=new Label("URL地址:");
JTextField jtf;
JButton jbDownLoad;
JButton jbChooseFolder;
JPanel jp;
static File directoryToSave;
public DownloadWindow(){
jta=new JTextArea();
jtf=new JTextField(50);
jbDownLoad=new JButton("开始下载");
jbChooseFolder=new JButton("选择目标文件夹");
jbDownLoad.addActionListener(this);
jbChooseFolder.addActionListener(this);
jp=new JPanel();
jp.setLayout(new FlowLayout());
jp.add(label);
jp.add(jtf);
jp.add(jbDownLoad);
jp.add(jbChooseFolder);
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add(jta,BorderLayout.CENTER);
this.getContentPane().add(jp,BorderLayout.SOUTH);
setTitle("文件下载器");
setSize(1000,600);
setVisible(true);
jta.append("你必须首先选择目标文件夹,然后再输入URL地址,最后点击下载按钮开始下载"+"\n");
}
public void actionPerformed(ActionEvent e){
if(e.getSource()==jbDownLoad){
Set <String> txtToDownload=parserBaiDu(jtf.getText());
beginToDownload(txtToDownload);
}
else if(e.getSource()==jbChooseFolder){
JFileChooser chooser = new JFileChooser();
chooser.setDialogTitle("选择保存文件的目标文件夹");
chooser.setCurrentDirectory(new File("F:\\Test文件夹\\"));
chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
chooser.showOpenDialog(this);
directoryToSave=chooser.getSelectedFile();
if(directoryToSave!=null){
jta.append("你选择的文件保存路径为:"+directoryToSave.toString()+"\n");
}
}
}
public static Set<String> parserBaiDu(String url){
Set <String> links=new HashSet<String>();
StringBuffer strTemp=new StringBuffer();
while(true){
try {
URL urlToParser=new URL(url);
URLConnection urlConnection=urlToParser.openConnection();
InputStream is=urlConnection.getInputStream();
byte[] bt=new byte[1024];
while((is.read(bt,0,1023)!=-1)){
strTemp.append(bt);
}
}
catch(Exception e){
e.printStackTrace();
}
int j=0;
NodeList nodes=null;
try{
Parser parser = new Parser(url);
NodeFilter tagNameFilter = new TagNameFilter("a");
NodeFilter attrbFilter = new HasAttributeFilter("class","m");
NodeFilter andFilter = new AndFilter(tagNameFilter,attrbFilter);
nodes = parser.extractAllNodesThatMatch(andFilter);
}
catch(Exception e){
e.printStackTrace();
}
for(int i=0;i<nodes.size();i++){
Node node = (Node)nodes.elementAt(i);
String nodeTxt = node.getText();
int startIndex = nodeTxt.indexOf("\"");
int endIndex = nodeTxt.indexOf("\"",startIndex+1);
String link = nodeTxt.substring(startIndex+1, endIndex);
links.add(link);
}
if((strTemp.indexOf(new String("提示:限于网页篇幅,部分结果未予显示")))==-1){
url=url.replace("pn="+10*j, "pn="+10*(++j));
}
else{
break;
}
}
return links;
}
public static boolean beginToDownload(Set<String> hrefs){
int i=1;
for(Iterator iter=hrefs.iterator();iter.hasNext();){