package org.arong.egdownloader.ui.menuitem; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.List; import javax.swing.JMenuItem; import org.arong.egdownloader.model.Task; import org.arong.egdownloader.model.TaskStatus; import org.arong.egdownloader.ui.IconManager; import org.arong.egdownloader.ui.table.TaskingTable; import org.arong.egdownloader.ui.window.EgDownloaderWindow; import org.arong.util.Tracker; /** * 暂停所有任务 * @author dipoo * @since 2014-12-07 */ public class StopAllTaskMenuItem extends JMenuItem { private static final long serialVersionUID = 8033742031776192264L; public StopAllTaskMenuItem(String text, final EgDownloaderWindow window){ super(text); this.setIcon(IconManager.getIcon("stop")); this.setForeground(new Color(0,0,85)); this.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { //获取所有未完成、未开始的任务 TaskingTable table = (TaskingTable) window.runningTable; //如果正在重建,则不执行 if(table.isRebuild()){ Tracker.println(StartAllTaskMenuItem.class, "正在重建任务"); return; } List<Task> tasks = table.getTasks(); Task task = null; for(int i = 0; i < tasks.size(); i ++){ if(tasks.get(i).getStatus() == TaskStatus.STARTED || tasks.get(i).getStatus() == TaskStatus.WAITING){ task = tasks.get(i); task.setStatus(TaskStatus.STOPED); if(task.getDownloadWorker() != null){ task.getDownloadWorker().cancel(true); task.setDownloadWorker(null);//swingworker不能复用,需要重新建立 //更新任务数据 window.taskDbTemplate.update(task); } } } //清空排队等待列表 if(table.getWaitingTasks() != null){ table.getWaitingTasks().clear(); } //清空正在下载数 table.setRunningNum(0); Tracker.println(getClass(), "【所有任务已暂停】"); } }); } }