java仿迅雷多线程下载工具源码
附件:
系统全部源码: package ynu.ui;
import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Insets; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.Toolkit; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.image.BufferedImage; import java.io.File;
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import
java.io.ObjectOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List;
import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTable; import javax.swing.JToolBar; import javax.swing.KeyStroke; import javax.swing.ListSelectionModel; import javax.swing.SwingUtilities; import javax.swing.Timer; import
javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode; import
javax.swing.tree.TreePath; import ynu.ContextHolder; import ynu.DownloadContext; import ynu.info.Info;
import ynu.navigation.DownloadNode; import ynu.navigation.DownloadingNode; import ynu.navigation.FailNode; import ynu.navigation.FinishNode; import ynu.navigation.TaskNode; import ynu.object.Resource; import ynu.state.Downloading; import ynu.state.Failed; import ynu.state.Finished; import ynu.state.Pause; import ynu.util.DateUtil; import ynu.util.FileUtil; import ynu.util.ImageUtil;
import javax.swing.UnsupportedLookAndFeelException; 1
@SuppressWarnings("serial")
public class MainFrame extends JFrame {
// 菜单栏
private JMenuBar mb = new JMenuBar();
// “文件”菜单
private JMenu file = new JMenu("文件(F)");
// “帮助”菜单
private JMenu tool = new JMenu("工具(T)");
// “帮助”菜单
private JMenu help = new JMenu("帮助(H)");
// “新建”菜单项
private JMenuItem build = new JMenuItem("新建", ImageUtil.SUSPEND_NEW_IAMGE); // “开始”菜单项
private JMenuItem star = new JMenuItem("开始", ImageUtil.SUSPEND_START0_IAMGE); // “暂停”菜单项
private JMenuItem paus = new JMenuItem("暂停", ImageUtil.SUSPEND_PAUSE0_IAMGE); // “删除”菜单项
private JMenuItem delet = new JMenuItem("删除",
ImageUtil.SUSPEND_DELETE0_IAMGE);
// “全部开始”菜单项
private JMenuItem allStart = new JMenuItem("全部开始",
ImageUtil.SUSPEND_START_IAMGE);
// “全部暂停”菜单项
private JMenuItem allPause = new JMenuItem("全部暂停",
ImageUtil.SUSPEND_PAUSE_IAMGE);
// “删除已完成任务”菜单
private JMenuItem deleteFinishe = new JMenuItem("移除完成",
ImageUtil.SUSPEND_REMOVE_IAMGE);
// “退出”菜单项
private JMenuItem exit = new JMenuItem("退出", ImageUtil.SUSPEND_QUIT_IAMGE); // “工具”菜单项
private JMenuItem powerboot = new JMenuItem("开机自动启动赤兔",
ImageUtil.SUSPEND_KAIJI_IAMGE);
// “工具”菜单项
private JMenuItem shutdown = new JMenuItem("下载完成自动关机",
ImageUtil.SUSPEND_GUANJI_IAMGE);
// “关于”菜单项
private JMenuItem about = new JMenuItem("关于赤兔",
ImageUtil.SUSPEND_HELP_IAMGE);
// 下载
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
格弹出菜单,当在表格中单击右键时弹出菜单
private JPopupMenu tablePopupMenu = new JPopupMenu();
// 打开文件
private JMenuItem openFileMenu = new JMenuItem("打开文件",
ImageUtil.SUSPEND_OPEN_IAMGE);
// 打开文件
private JMenuItem openFolderMenu = new JMenuItem("打开文件夹",
ImageUtil.SUSPEND_FOLDER_IAMGE);
// 开始任务项
private JMenuItem startTaskMenu = new JMenuItem("开始任务",
ImageUtil.SUSPEND_START0_IAMGE);
// 暂停任务项
private JMenuItem pauseTaskMenu = new JMenuItem("暂停任务",
ImageUtil.SUSPEND_PAUSE0_IAMGE);
// 删除任务项
private JMenuItem deleteTaskMenu = new JMenuItem("删除任务",
ImageUtil.SUSPEND_DELETE0_IAMGE);
// 全部开始项
private JMenuItem allStartMenu = new JMenuItem("全部开始",
ImageUtil.SUSPEND_START_IAMGE);
// 全部暂停项
private JMenuItem allPauseMenu = new JMenuItem("全部暂停",
ImageUtil.SUSPEND_PAUSE_IAMGE);
// 全部暂停项
private JMenuItem deleteFinishedMenu = new JMenuItem("删除完成任务
",
ImageUtil.SUSPEND_REMOVE_IAMGE);
private AboutDialog aboutDialog = new AboutDialog(this, "关于赤兔",
true);
2
// 设置应用程序图标 private ImageIcon appImage = new ImageIcon("images/flashget.gif"); // 导航树 private NavigationTree navTree; // 下载列表 private DownloadTable downloadTable; // 信息列表 private
JList infoJList; // 工具栏 private JToolBar toolBar = new JToolBar(); // 新任务界
面 private NewTaskFrame taskFrame; // 所有任务节点 private TaskNode taskNode = new TaskNode(); // 正在下载节点 private DownloadingNode downloadingNode = new DownloadingNode(); // 下载失败节点 private FailNode failNode = new FailNode(); // 下载完成节点 private FinishNode finishNode = new FinishNode(); // 当前用户浏览的节点 private DownloadNode currentNode = taskNode; // 信息列表
的对象 private final static String FILE_SIZE_TEXT = "文件大小: ";
private final static String FILE_PATH_TEXT = "文件路径: "; private
final static String DOWNLOAD_DATE_TEXT = "下载时间: "; private
final static String RESOURCE_INFO_TEXT = "下载状态: "; private
List<Info> infoList = new ArrayList<Info>(); private Info fileSize = new
Info(FILE_SIZE_TEXT); private Info filePath = new Info(FILE_PATH_TEXT);
private Info downloadDate = new Info(DOWNLOAD_DATE_TEXT); private Info
info = new Info(RESOURCE_INFO_TEXT); // 悬浮窗口 private SuspendWindow suspendWindow; // 任务栏图标 private TrayIcon trayIcon; // 任务栏图标菜单
private PopupMenu popupMenu = new PopupMenu(); private MenuItem openItem =
new MenuItem("打开/关闭"); private MenuItem newItem = new MenuItem("新建下载任务"); private MenuItem startItem = new MenuItem("开始全部任务"); private MenuItem pauseItem = new MenuItem("暂停全部任务"); private MenuItem removeItem = new MenuItem("删除完成任务"); private MenuItem quitItem = new MenuItem("退出"); private BufferedImage trayIconImage =
ImageUtil .getImage(ImageUtil.TRAY_ICON_PATH);
@SuppressWarnings("serial") private Action newTask = new AbstractAction("新任务", new
ImageIcon( "images/tool/new-download.gif")) { public void actionPerformed(ActionEvent e) { newTask(); } };
@SuppressWarnings("serial") private Action start = new AbstractAction("开始", new
ImageIcon( "images/tool/do-download.gif")) { public void actionPerformed(ActionEvent e) { start(); } };
@SuppressWarnings("serial") private Action pause = new AbstractAction("暂停", new
ImageIcon( "images/tool/pause.gif")) {
3
}; public void actionPerformed(ActionEvent e) { pause(); } @SuppressWarnings("serial") private Action delete = new AbstractAction("删除任务", new
ImageIcon( "images/tool/delete.gif")) { public void actionPerformed(ActionEvent e) { delete(); } };
@SuppressWarnings("serial") private Action deleteFinished = new AbstractAction("移除已完成任务", new
ImageIcon("images/tool/remove-finished.gif")) { public void actionPerformed(ActionEvent e) { deleteFinished(); } }; ActionListener refreshTable = new ActionListener() { public void actionPerformed(ActionEvent e) { // 刷新列表 downloadTable.updateUI(); } }; ActionListener fileItemListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { } }; ActionListener helpItemListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String cmd = e.getActionCommand(); if (cmd.equals("关于赤兔
")) { // 显示关于对话框 aboutDialog.showDialog(); } }; } public MainFrame() { // 设置Windows风格 try
{ UIManager .setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); } catch (InstantiationException ie) { ie.printStackTrace(); } catch (IllegalAccessException iae) { iae.printStackTrace(); } catch (UnsupportedLookAndFeelException ulafe) { ulafe.printStackTrace(); } // 更新主界面
SwingUtilities.updateComponentTreeUI(this.getContentPane()); // 更新菜单条以
及SwingUtilities.updateComponentTreeUI(mb); // 更新关于对话框以及
SwingUtilities.updateComponentTreeUI(aboutDialog); // 设置应用程序图标
setIconImage(appImage.getImage()); // 创建导航树 createTree();
4
} createDownloadTable(); // 创建信息列表 createList(); this.taskFrame = new
NewTaskFrame(); // 创建悬浮窗口 this.suspendWindow = new
SuspendWindow(this); // 创建任务栏图标 createTrayIcon(); // 创建工具栏
createToolBar(); createAllMenu(); createTablePopupMenu(); // 得到屏幕大小
Dimension screen = Toolkit.getDefaultToolkit().getScreenSize(); // 导航滚动
JScrollPane navPane = new JScrollPane(this.navTree); JScrollPane downloadPane = new JScrollPane(this.downloadTable); int downloadPaneHeight = (int) (screen.height / 1.5); int downloadPaneWidth = (int) (screen.width / 0.9); downloadPane.setPreferredSize(new Dimension(downloadPaneWidth, downloadPaneHeight)); JScrollPane infoPane = new JScrollPane(this.infoJList); // 主
界面右边的分隔Pane JSplitPane rightPane = new
JSplitPane(JSplitPane.VERTICAL_SPLIT, downloadPane, infoPane); rightPane.setDividerLocation(400); rightPane.setDividerSize(3); // 主界面的分隔
Pane JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, navPane, rightPane); mainPane.setDividerSize(3); mainPane.setDividerLocation((int) (screen.width / 10)); this.add(mainPane); this.setPreferredSize(new Dimension(screen.width, screen.height - 30)); this.setVisible(true); this.setTitle("
赤兔多线程下载工具"); this.pack(); initlisteners(); // 创建定时器 Timer
timer = new Timer(1200, refreshTable); timer.start(); // 读取序列化文件
reverseSer(); // 只调整最后一列的宽度JTable.AUTO_RESIZE_LAST_COLUMN
downloadTable.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN); // JTable选择模式
downloadTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); // 限
制JTabel的列随意拖动互换
downloadTable.getTableHeader().setReorderingAllowed(false); // JTable的高度和宽
度按照下面的
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
来设定 downloadTable.setRowHeight(23); // 为下载列表添加
弹出式菜单 downloadTable.setComponentPopupMenu(tablePopupMenu); public NewTaskFrame getNewTaskFrame() { return this.taskFrame; } private void createTablePopupMenu() { tablePopupMenu.add(openFileMenu); tablePopupMenu.add(openFolderMenu); tablePopupMenu.addSeparator(); tablePopupMenu.add(startTaskMenu); tablePopupMenu.add(pauseTaskMenu); tablePopupMenu.add(deleteTaskMenu); tablePopupMenu.addSeparator(); tablePopupMenu.add(allStartMenu);
5
} tablePopupMenu.add(allPauseMenu); tablePopupMenu.add(deleteFinishedMenu); openFileMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { openfile(); } catch (IOException e) { // TODO Auto-generated catch block
e.printStackTrace(); } } }); openFolderMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { try { openfolder(); } catch (IOException e) { e.printStackTrace(); } } }); startTaskMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { start(); } });
pauseTaskMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { pause(); } });
deleteTaskMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { delete(); } });
allStartMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { startAllTask(); } }); allPauseMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { pauseAllTask(); } }); deleteFinishedMenu.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { deleteFinished(); } }); private void createAllMenu() { // 文件菜单项的事件监听器,设置菜单栏快捷键
build.addActionListener(fileItemListener);
build.setAccelerator(KeyStroke.getKeyStroke("ctrl B")); star.addActionListener(fileItemListener);
star.setAccelerator(KeyStroke.getKeyStroke("ctrl S")); paus.addActionListener(fileItemListener);
paus.setAccelerator(KeyStroke.getKeyStroke("ctrl P")); delet.addActionListener(fileItemListener);
delet.setAccelerator(KeyStroke.getKeyStroke("ctrl D")); allStart.addActionListener(fileItemListener);
allStart.setAccelerator(KeyStroke.getKeyStroke("ctrl A")); allPause.addActionListener(fileItemListener);
allPause.setAccelerator(KeyStroke.getKeyStroke("ctrl U")); deleteFinishe.addActionListener(fileItemListener);
6
deleteFinishe.setAccelerator(KeyStroke.getKeyStroke("ctrl W")); exit.addActionListener(fileItemListener);
exit.setAccelerator(KeyStroke.getKeyStroke("ctrl E")); build.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { taskFrame.setVisible(true); } }); star.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { start(); } }); paus.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { pause(); } }); delet.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { delete(); } });
allStart.addActionListener(new ActionListener() { public void
actionPerformed(ActionEvent arg0) { startAllTask(); } }); allPause.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { pauseAllTask(); } }); deleteFinishe.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { deleteFinished(); } }); exit.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { serializable(); System.exit(0); } }); // 为文件菜单加入所有子项 file.add(build); file.addSeparator(); file.add(star); file.add(paus); file.add(delet); file.addSeparator(); file.add(allStart); file.add(allPause);
file.add(deleteFinishe); file.addSeparator(); file.add(exit); // 为“帮助”菜单子项加入
事件监听器 about.addActionListener(helpItemListener); // 为工具菜单加入所有子
项 tool.add(powerboot); tool.addSeparator(); tool.add(shutdown); // 为帮助菜单加
入所有子项 help.add(about); // 为菜单条加入所有菜单 mb.add(file);
7
} mb.add(tool); mb.add(help); // 为窗口设置菜单条 setJMenuBar(mb); /** *
创建任务栏图标 */ private void createTrayIcon()
{ this.popupMenu.add(openItem); this.popupMenu.add(newItem); this.popupMenu.add(startItem); this.popupMenu.add(pauseItem); this.popupMenu.add(removeItem); this.popupMenu.add(quitItem); try { SystemTray tray = SystemTray.getSystemTray(); this.trayIcon = new TrayIcon(trayIconImage, "赤兔", this.popupMenu);
this.trayIcon.setToolTip("赤兔"); tray.add(this.trayIcon); } catch (Exception e) { e.printStackTrace(); } } private void initlisteners() { // 点击列
表鼠标监听器 this.downloadTable.addMouseListener(new MouseAdapter() { @SuppressWarnings("unchecked") public void mouseClicked(MouseEvent e) { // 得到点击的资源 Resource r =
getResource(); if (r == null) return; // 设置信息显示区域的值
fileSize.setValue(FILE_SIZE_TEXT + r.getSize() / 1024 + " K"); filePath.setValue(FILE_PATH_TEXT + r.getSaveFile().getAbsolutePath()); downloadDate.setValue(DOWNLOAD_DATE_TEXT +
DateUtil.formatDate(r.getDownloadDate()));
info.setValue(RESOURCE_INFO_TEXT + r.getState().getState()); // 重新设置
JList数据 infoJList.setListData(infoList.toArray()); } }); // 点击导航树
鼠标监听器 this.navTree.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { selectTree(); } }); // 窗体关闭事件,当窗
体关闭时不终止程序,而是隐藏界面 this.addWindowListener(new
WindowAdapter() { public void windowClosing(WindowEvent e) { setVisible(false); } }); // 任务栏图标监听器
this.trayIcon.addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { if (e.getClickCount() == 2) { setVisible(true); } } }); this.openItem.addActionListener(new
ActionListener() { public void actionPerformed(ActionEvent arg0) { if (isVisible())
8
} setVisible(false); else setVisible(true); } }); this.newItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { taskFrame.setVisible(true); } }); this.startItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { startAllTask(); } }); this.pauseItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { pauseAllTask(); } }); this.removeItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { deleteFinished(); } }); this.quitItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { serializable(); System.exit(0); } }); /**
*/ private void selectTree() { DownloadNode * 点击导航树触发的方法
selectNode = getSelectNode(); this.currentNode = selectNode; refreshTable(); } /** * 刷新列表 */ private void refreshTable() { DownloadTableModel model = (DownloadTableModel) this.downloadTable .getModel();
model.setResources(ContextHolder.ctx.getResources(currentNode)); } private DownloadNode getSelectNode() { TreePath treePath =
this.navTree.getSelectionPath(); if (treePath == null) return null; // 获得选中
的TreeNode DefaultMutableTreeNode node = (DefaultMutableTreeNode) treePath .getLastPathComponent(); return (DownloadNode) node.getUserObject(); } private void addTableData() { DownloadTableModel model = (DownloadTableModel) this.downloadTable .getModel(); // 将保存的
资源设置到列表中 model.setResources(ContextHolder.ctx.resources); // 刷新列
表 this.downloadTable.refresh(); } /**
9