⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadframe.java

📁 java 多线程下载程序
💻 JAVA
字号:
package down2;

import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

import down2.event.MultiDownloadEvent;
import down2.event.MultiDownloadListener;
import down2.event.ThreadNotifyEvent;
import down2.event.ThreadNotifyListener;

/**
 * 
 * <p>Title: DLFrame.java</p>
 * <p>Description: </p>
 * <p>Copyright:OnewaveInc Copyright (c) 2007</p>
 * <p>Company: OnewaveInc</p>
 * @author Zhengrw
 * @version 3.0
 */
public class DownLoadFrame extends JFrame implements MultiDownloadListener, ThreadNotifyListener{
	
	private static final long serialVersionUID = 7422856671072806671L;

	private JPanel contentPane;

	private JTextField textField1 = new JTextField();

	private JTextField textField2 = new JTextField();

	private JButton btnDL = new JButton();

	private JLabel label1 = new JLabel();

	private JLabel label2 = new JLabel();

	private JTextArea textArea = new JTextArea();

	private String dlURL = new String();

	private String saveFileAs = new String();
	
	private int nthread = 5;

	public DownLoadFrame() {
		enableEvents(AWTEvent.WINDOW_EVENT_MASK);
		try {
			init();

		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}

	private void init() throws Exception {
		contentPane = (JPanel) this.getContentPane();
		contentPane.setLayout(null);
		this.setSize(new Dimension(380, 320));
		this.setLocation(100, 100);
		this.setTitle("多线程下载");
		textField1.setBounds(new Rectangle(150, 200, 200, 20));
		textField1
				.setText("http://192.168.4.5:8181/3.rmvb");
		textField2.setBounds(new Rectangle(150, 240, 120, 20));
		textField2.setText("f:\\3.rar");
		label1.setBounds(new Rectangle(20, 200, 120, 20));
		label1.setText("下载的目标文件为: ");
		label2.setBounds(new Rectangle(20, 240, 120, 20));
		label2.setText("下载的文件另存为: ");
		btnDL.setBounds(new Rectangle(280, 240, 60, 20));
		btnDL.setText("下载");
		btnDL.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				button_actionPerformed(e);
			}
		});
		JScrollPane scrollPane = new JScrollPane(textArea);
		scrollPane.setBounds(new Rectangle(20, 20, 330, 170));
		textArea.setEditable(false);

		contentPane.add(textField1, null);
		contentPane.add(textField2, null);
		contentPane.add(label1, null);
		contentPane.add(label2, null);
		contentPane.add(btnDL, null);
		//contentPane.add(textArea,null);
		contentPane.add(scrollPane, null);
		dlURL = textField1.getText();
		saveFileAs = textField2.getText();

		this.setDefaultCloseOperation(EXIT_ON_CLOSE);

	}

	public void button_actionPerformed(ActionEvent e) {
		//启动分析下载文件的进程
		dlURL = textField1.getText();
		saveFileAs = textField2.getText();
		if (dlURL.compareTo("") == 0 && saveFileAs.compareTo("") == 0) {
			textArea.setText("请输入要下载的文件和保存文件完整地址");
		} else {
			try {
				DownFile downFile = new DownFile(dlURL, saveFileAs, nthread);
				downFile.addMultiDownloadListener(this);
				downFile.addThreadNotifyLitener(this);
				downFile.start();
				textArea.append("主线程启动...");
				String info = "目标文件: " + dlURL;
				textArea.append("\n" + info);
				info = "\n 线程总数: " + nthread;
				System.out.println(info);
				textArea.append("\n" + info);
			} catch (Exception ex) {
				ex.printStackTrace();
			}

		}

	}

	public static void main(String[] args) {
		new DownLoadFrame().setVisible(true);//要实例化一个对象的时候才会去执行构造方法

	}

	public void threadStarted(MultiDownloadEvent event) {
		textArea.append("\n" + "线程"+event.getThreadId()+"开始下载...");
	}

	public void threadStoped(MultiDownloadEvent event) {
		if(event.getOperation() == MultiDownloadEvent.DL_STOP){
			textArea.append("\n" + "线程"+event.getThreadId()+"结束下载...");
		}else if(event.getOperation() == MultiDownloadEvent.DL_STOP_EXCEPTION){
			textArea.append("\n" + "线程"+event.getThreadId()+"异常结束下载...");
		}
		
	}

	public void exceptionOccured(ThreadNotifyEvent event) {
		if(event.getType()==ThreadNotifyEvent.DL_EXCEPTION_FILE_EXSITS){
			textArea.append("\n" + "文件不存在,下载失败...");
		}else if(event.getType()==ThreadNotifyEvent.DL_EXCEPTION_FILE_LENGTH){
			textArea.append("\n" + "获取文件长度失败,停止下载...");
		}
	}

	public void notifyInfo(ThreadNotifyEvent event) {
		if(event.getType()==ThreadNotifyEvent.DL_NOTIFY_FILE_END){
			textArea.append("\n" + "文件下载结束...");
		}else if(event.getType()==ThreadNotifyEvent.DL_NOTIFY_SCOPE){
			textArea.append("\n" + "线程" + event.getThreadId()+"的下载范围:"+event.getStart()+"~"+event.getEnd());
		}else if(event.getType()==ThreadNotifyEvent.DL_NOTIFY_START){
			textArea.append("\n" + "线程" + event.getThreadId()+"启动...");
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -