说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何用多线程设计一个下载的程序

编辑:说三道四文库 发布时间:2018-06-23 05:08
HTML文档下载 WORD文档下载 PDF文档下载
Computer001 于 2011-03-17 15:20:10 编辑 以下代码是一个单线程的下载程序,如何实现多线程。
这个单线程的下载程序一按下按钮后程序开始运行了,但是按钮确没有弹起,直到程序运行结束后
按钮才弹起,如何用多线程的方式做呢?
如果是多线程那么是不是就不会出现这样情况?


import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SwingDown extends JFrame {
JTextField jtxtUrl;
JButton jbutDown;
JButton jbutExit;
JLabel Jlb;
JTextArea jta;
JScrollPane js;
BufferedInputStream bis;
FileOutputStream fos;
URL url;
JPanel jpup;
JPanel jpcenter;
JPanel jpdown;
int counter=0;//计数器
public SwingDown(){
this.setLayout(new BorderLayout());
//标签
Jlb = new JLabel();
Jlb.setText("输入地址:");
//输入框
jtxtUrl = new JTextField(33);
//按钮
jbutDown = new JButton();
jbutDown.setText("开始下载");
jbutExit = new JButton();
jbutExit.setText("退出程序");
jbutExit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent evt){
System.exit(-1);
}
});
//文本域
jta = new JTextArea();
jta.setLineWrap(true);
jta.setForeground(Color.BLUE);
js = new JScrollPane(jta);
//面板上部
jpup = new JPanel();
jpup.add(Jlb);
jpup.add(jtxtUrl);
//面板中部
jpcenter = new JPanel();
jpcenter.setLayout(new GridLayout(1,1));
jpcenter.add(js);
   //面板下部
jpdown = new JPanel();
jpdown.add(jbutDown);
jpdown.add(jbutExit);

this.add(jpup,BorderLayout.NORTH);
this.add(jpcenter,BorderLayout.CENTER);
this.add(jpdown,BorderLayout.SOUTH);

this.setSize(450,200);
this.setVisible(true);
this.setLocation(300,250);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void downLoad(){
jbutDown.addActionListener( new ActionListener(){
public void actionPerformed(ActionEvent evt)
{
String httpurl = getText();
if(httpurl.equals(""))
{
msg("地址不能为空!请重新输入!");
jtxtUrl.setText("");
jtxtUrl.requestFocus();
}else{
try{
url = new URL(jtxtUrl.getText());
}catch(Exception e)
{
e.printStackTrace();
}
try{
bis = new BufferedInputStream(url.openStream());
fos = new FileOutputStream(getFileName());
int buffer;
while((buffer = bis.read())!=-1)
{
fos.write(buffer);
counter++;
}
fos.close();
bis.close();
}catch(Exception e)
{
e.printStackTrace();
}
String statusInfo ="下载地址:"+jtxtUrl.getText()+" ; "+
"\n"+"总字节数:"+counter+" ; "+
"\n文件名称:"+getFileName()+" ; "+
"\n"+ "下载文件"+getFileName()+"成功";
jta.setText(statusInfo);
msg("下载成功");
jtxtUrl.setText("");
}
}
});
}
public void msg(String msg){
new JOptionPane().showMessageDialog(null,msg);
}
public String getText(){
return jtxtUrl.getText();
}
public String getFileName(){
return url.getFile().replace("/","");
}
public static void main(String [] args)
{
SwingDown down = new SwingDown();
down.downLoad();
}
}
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘