📄 downloadaction.java
字号:
/* * @(#) DownloadAction.java * Copyright 2004 HWStudio. All rights reserved. */package hws.item.smart.action.share.download;//导入核心Java类库import java.io.File;import java.io.IOException;import java.awt.event.ActionEvent;import java.net.MalformedURLException;import java.util.Vector;import javax.swing.JOptionPane;import javax.swing.JFileChooser;//导入自定义Java类库import hws.item.smart.Smart;import hws.item.smart.misc.XMLConfig;import hws.item.smart.misc.StringShop;import hws.item.smart.panel.function.chat.ViewPanel;import hws.item.smart.panel.function.share.DownloadPanel;import hws.item.smart.action.BaseAction;import hws.item.smart.utility.chat.FriendsInfo;//导入第三方Java类库import org.jdom.Element;import org.jdom.Document;import org.jdom.output.XMLOutputter;import org.apache.xmlrpc.XmlRpc;import org.apache.xmlrpc.XmlRpcClient;import org.apache.xmlrpc.XmlRpcRequest;import org.apache.xmlrpc.XmlRpcException;/** * 下载选中的文件 * * @version 0.1 2005-08-30 * @author Hwerz */public class DownloadAction extends BaseAction { /*------------------------------------------------------------------------* * 属性定义 * *------------------------------------------------------------------------*/ /** * 该类自身的一个静态引用 */ private static DownloadAction action; /*------------------------------------------------------------------------* * 构造函数 * *------------------------------------------------------------------------*/ /** * 构造函数为私有,这样在整个运行过程中该类就只能有一个实例 */ private DownloadAction() { super("下载"); setHintInfo("下载选中的文件"); setEnabled(false); } /*------------------------------------------------------------------------* * 公共方法 * *------------------------------------------------------------------------*/ /** * 对该类提供的一个全局访问点,用来实例化该对象 * * @return 该类唯一的一个实例 */ public static DownloadAction getInstance() { if (action == null) { action = new DownloadAction(); } return action; } /*------------------------------------------------------------------------* * 私有方法 * *------------------------------------------------------------------------*/ /** * 下载选择的文件到指定的目录下 * * @param dir 指定的目录 */ private void download(String dir) { try { XmlRpc.setDriver("org.apache.xerces.parsers.SAXParser"); XmlRpcClient client = new XmlRpcClient(genURL()); client.execute(genRequest(dir)); } catch (ClassNotFoundException e) { JOptionPane.showMessageDialog(Smart.getInstance(), "系统找不到类库“org.apache.xerces.parsers.SAXParser”!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } catch (MalformedURLException e) { e.printStackTrace(); } catch (XmlRpcException e) { e.printStackTrace(); } catch (IOException e) { JOptionPane.showMessageDialog(Smart.getInstance(), "好友不在线,文件下载失败!", StringShop.HINT_TITLE, JOptionPane.INFORMATION_MESSAGE); } } /** * 生成请求URL * * @return 生成的请求URL */ private String genURL() { StringBuffer url = new StringBuffer(); url.append("http://"); String friendID = DownloadPanel.getInstance().getSelectedFriendID(); url.append(FriendsInfo.getFriendIP(friendID)); url.append(":"); int delta = Integer.parseInt(friendID); url.append(XMLConfig.getRequestPort() + delta); url.append("/"); return url.toString(); } /** * 生成XML-RPC请求消息 * * @return 生成的XML-RPC请求消息 * @param dir 指定的目录 */ private XmlRpcRequest genRequest(String dir) { //请求方法 StringBuffer method = new StringBuffer(); method.append(XMLConfig.getRequestClass()); method.append("."); method.append(XMLConfig.getRequestMethod()); //请求参数 Vector params = new Vector(); XMLOutputter outputter = new XMLOutputter(); params.addElement(outputter.outputString(genDocument(dir))); return new XmlRpcRequest(method.toString(), params); } /** * 生成XML文档 * * @return 生成的XML文档 * @param dir 指定的目录 */ private Document genDocument(String dir) { Element request = new Element("Request"); Element r = new Element("Requester"); r.setAttribute("id", ViewPanel.getInstance().getUserID()); r.setAttribute("dir", dir); r.setAttribute("file", DownloadPanel.getInstance().getSelectedFile()); request.addContent(r); return new Document(request); } /*------------------------------------------------------------------------* * 覆盖方法 * *------------------------------------------------------------------------*/ /** * 覆盖超类Action的方法 * * @param event ActionEvent对象 */ public void actionPerformed(ActionEvent event) { boolean flag = true; do { JFileChooser chooser = new JFileChooser(); chooser.setDialogTitle("选择文件保存的目录"); chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); int option = chooser.showSaveDialog(Smart.getInstance()); if (option == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); if (file.exists() && file.isDirectory()) { download(file.getAbsolutePath()); setEnabled(false); flag = false; } else { int option2 = JOptionPane.showConfirmDialog( Smart.getInstance(), "您选择的目录不合法,要继续吗?", StringShop.HINT_TITLE, JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE); if (option2 == JOptionPane.NO_OPTION) { flag = false; } } } else { flag = false; } } while (flag); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -