📄 downloadframe.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 + -