在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Java网络编程 → java 仿foxmail -类似foxmail_demo

java 仿foxmail -类似foxmail_demo

Java网络编程

下载此实例
  • 开发语言:Java
  • 实例大小:0.96M
  • 下载次数:42
  • 浏览次数:1848
  • 发布时间:2015-12-18
  • 实例类别:Java网络编程
  • 发 布 人:226386436
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 类似foxmail_demo

实例介绍

【实例简介】
【实例截图】

【核心代码】

package org.crazyit.foxmail.ui;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTextArea;
import javax.swing.JToolBar;
import javax.swing.JTree;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;

import org.crazyit.foxmail.box.DeletedBox;
import org.crazyit.foxmail.box.DraftBox;
import org.crazyit.foxmail.box.InBox;
import org.crazyit.foxmail.box.MailBox;
import org.crazyit.foxmail.box.OutBox;
import org.crazyit.foxmail.box.SentBox;
import org.crazyit.foxmail.mail.MailLoader;
import org.crazyit.foxmail.mail.MailLoaderImpl;
import org.crazyit.foxmail.mail.MailSender;
import org.crazyit.foxmail.mail.MailSenderImpl;
import org.crazyit.foxmail.object.Mail;
import org.crazyit.foxmail.system.SystemHandler;
import org.crazyit.foxmail.system.SystemLoader;
import org.crazyit.foxmail.system.impl.SystemHandlerImpl;
import org.crazyit.foxmail.system.impl.SystemLoaderImpl;
import org.crazyit.foxmail.util.FileUtil;

/**
 * 主界面
 * 
 * @author yangenxiong yangenxiong2009@gmail.com
 * @version  1.0
 * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a>
 * <br>Copyright (C), 2009-2010, yangenxiong
 * <br>This program is protected by copyright laws.
 */
public class MainFrame extends JFrame {

	//欢迎的JLabel
	private JLabel welcome = new JLabel("欢迎您:");
	//分隔左边的树与右边邮件信息的JSplitPane
	private JSplitPane mailSplitPane;
	//右边邮件列表与邮件信息的JSplitPane
	private JSplitPane mailListInfoPane;
	//邮件详细信息的JSplitPane, 左边是邮件信息, 右边是附件
	private JSplitPane mailInfoPane;
	//邮件列表的JTable
	private MailListTable mailListTable;
	//存放列表的的JScrollPane
	private JScrollPane tablePane;
	//邮件导航树的JScrollPane
	private JScrollPane treePane;
	//邮件导航树
	private JTree tree;
	//邮件显示JTextArea
	private JTextArea mailTextArea = new JTextArea(10, 80);
	//邮件显示的JScrollPane, 存放显示邮件的JTextArea
	private JScrollPane mailScrollPane;
	//邮件附件列表
	private JScrollPane filePane;
	//邮件附件名称显示
	private JList fileList;
	//工具栏
	private JToolBar toolBar = new JToolBar();
	
	//收件箱的Mail对象集合,代表所有在收件箱中的邮件
	private List<Mail> inMails;
	//发件箱的邮件集合
	private List<Mail> outMails;
	//成功发送的邮件集合
	private List<Mail> sentMails;
	//草稿箱的邮件集合
	private List<Mail> draftMails;
	//垃圾箱的邮件集合
	private List<Mail> deleteMails;
	//当前界面列表所显示的对象
	private List<Mail> currentMails;
	
	//写邮件的JFrame
	private MailFrame mailFrame;
	//系统设置界面对象
	private SetupFrame setupFrame;
	//邮箱加载对象
	private MailLoader mailLoader = new MailLoaderImpl();
	//本地中的邮件处理对象
	private SystemHandler systemHandler = new SystemHandlerImpl();
	//本地中的邮件加载对象
	private SystemLoader systemLoader = new SystemLoaderImpl();
	//发送邮件对象
	private MailSender mailSender = new MailSenderImpl();
	//当前打开的文件对象
	private Mail currentMail;
	//接收邮件的间隔, 单位毫秒
	private long receiveInterval = 1000 * 10;
	
	//收取邮件
	private Action in = new AbstractAction("收取邮件", new ImageIcon("images/in.gif")) {
		public void actionPerformed(ActionEvent e) {
			receive();
		}
	};
	
	//发送邮件
	private Action sent = new AbstractAction("发送邮件", new ImageIcon("images/out.gif")) {
		public void actionPerformed(ActionEvent e) {
			send();
		}
	};
	
	//写邮件
	private Action write = new AbstractAction("写邮件", new ImageIcon("images/new.gif")) {
		public void actionPerformed(ActionEvent e) {
			write();
		}
	};
	
	//回复邮件
	private Action reply = new AbstractAction("回复邮件", new ImageIcon("images/reply.gif")) {
		public void actionPerformed(ActionEvent e) {
			reply();
		}
	};
	
	//回复邮件
	private Action transmit = new AbstractAction("转发邮件", new ImageIcon("images/transmit.gif")) {
		public void actionPerformed(ActionEvent e) {
			transmit();
		}
	};
	
	//删除邮件, 放进垃圾箱
	private Action delete = new AbstractAction("删除邮件", new ImageIcon("images/delete.gif")) {
		public void actionPerformed(ActionEvent e) {
			delete();
		}
	};
	
	//彻底删除邮件
	private Action realDelete = new AbstractAction("彻底删除邮件", new ImageIcon("images/real-delete.gif")) {
		public void actionPerformed(ActionEvent e) {
			realDelete();
		}
	};
	
	//从垃圾箱中还原邮件
	private Action revert = new AbstractAction("还原邮件", new ImageIcon("images/revert.gif")) {
		public void actionPerformed(ActionEvent e) {
			revert();
		}
	};
	
	//设置
	private Action setup = new AbstractAction("设置", new ImageIcon("images/setup.gif")) {
		public void actionPerformed(ActionEvent e) {
			setup();
		}
	};
	
	private MailContext ctx;
	
	public MainFrame(MailContext ctx) {
		this.ctx = ctx;
		this.mailFrame = new MailFrame(this);
		//初始化各个列表集合
		initMails();
		//设置当前显示的邮件集合为收件箱的集合
		this.currentMails = this.inMails;
		//创建邮件导航树
		this.tree = createTree();
		//邮件列表JTable
		DefaultTableModel tableMode = new DefaultTableModel();
		this.mailListTable = new MailListTable(tableMode);
		tableMode.setDataVector(createViewDatas(this.currentMails), getListColumn());
		//设置邮件列表的样式
		setTableFace();
		this.tablePane = new JScrollPane(this.mailListTable);
		this.tablePane.setBackground(Color.WHITE);
		//邮件附件列表
		this.fileList = new JList();
		this.fileList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		this.fileList.addMouseListener(new MainListMouseListener());
		this.filePane = new JScrollPane(fileList);
		this.mailTextArea.setLineWrap(true);
		this.mailTextArea.setEditable(false);
		this.mailTextArea.setFont(new Font(null, Font.BOLD, 14));
		//显示邮件内容的JScrollPane
		this.mailScrollPane =  new JScrollPane(this.mailTextArea);
		//邮件的信息
		this.mailInfoPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, 
				this.filePane, this.mailScrollPane);
		this.mailInfoPane.setDividerSize(3);
		this.mailInfoPane.setDividerLocation(80);
		//邮件列表和邮件信息的JSplitPane
		this.mailListInfoPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, 
				this.tablePane, mailInfoPane);
		this.mailListInfoPane.setDividerLocation(300);
		this.mailListInfoPane.setDividerSize(20);
		
		//树的JScrollPane
		this.treePane = new JScrollPane(this.tree);
		//主整个邮件界面的JSplitPane
		this.mailSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, 
				this.treePane, this.mailListInfoPane);
		this.mailSplitPane.setDividerLocation(150);
		this.mailSplitPane.setDividerSize(3);
		//设置用户邮箱地址的显示
		this.welcome.setText(this.welcome.getText()   ctx.getUser());
		//创建工具栏
		createToolBar();
		//设置JFrame的各个属性
		this.add(mailSplitPane);
		this.setTitle("邮件收发客户端");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setExtendedState(JFrame.MAXIMIZED_BOTH);
		initListeners();
		Timer timer = new Timer();
		timer.schedule(new ReceiveTask(this), 10000, this.receiveInterval);
	}
	
	public SystemHandler getSystemHandler() {
		return this.systemHandler;
	}
	
	public MailSender getMailSender() {
		return this.mailSender;
	}
	
	private void initListeners() {
		//列表选择监听器
		this.mailListTable.getSelectionModel().addListSelectionListener(new ListSelectionListener(){
			public void valueChanged(ListSelectionEvent event) {
				//当选择行时鼠标释放时才执行
				if (!event.getValueIsAdjusting()) {
					//如果没有选中任何一行, 则返回
					if (mailListTable.getSelectedRowCount() != 1) return;
					viewMail();
				}
			}
		});
	}
	
	private boolean noSelectData(Mail mail) {
		if (mail == null) {
			showMessage("请选择需要操作的数据");
			return true;
		}
		return false;
	}
	
	//发送一封邮件
	private void send() {
		Mail mail = getSelectMail();
		if (noSelectData(mail)) return;
		if (isReceive(mail)) {
			showMessage("收件箱的邮件不能发送");
			return;
		}
		//进入写邮件界面
		this.mailFrame.sendInit(mail);
	}
	
	//回复邮件
	private void reply() {
		Mail mail = getSelectMail();
		if (noSelectData(mail)) return;
		//需要判断回复邮件是否在收件箱中
		if (!isReceive(mail)) {
			showMessage("只能回复收件箱中的邮件");
			return;
		}
		this.mailFrame.replyInit(mail);
	}
	
	//判断邮件是否在收件箱中
	private boolean isReceive(Mail mail) {
		for (Mail m : this.inMails) {
			if (m.getXmlName().equals(mail.getXmlName())) return true;
		}
		return false;
	}
	
	//转发
	private void transmit() {
		Mail mail = getSelectMail();
		if (noSelectData(mail)) return;
		this.mailFrame.transmitInit(mail);
	}
	
	//还原邮件
	public void revert() {
		Mail mail = getSelectMail();
		if (noSelectData(mail)) return;
		//垃圾箱包含这个Mail对象才进行还原
		if (this.deleteMails.contains(mail)) {
			//从垃圾箱集合中删除
			this.deleteMails.remove(mail);
			//操作文件, 并deleted目录中的xml中
			this.systemHandler.revert(mail, this.ctx);
			//还原到各个集合中
			revertMailToList(mail);
		}
		this.currentMail = null;
		refreshTable();
		cleanMailInfo();
	}
	
	//还原Mail对象到各个相应的集合
	private void revertMailToList(Mail mail) {
		if (mail.getFrom().equals(FileUtil.INBOX)) {
			this.inMails.add(mail);
		} else if (mail.getFrom().equals(FileUtil.SENT)) {
			this.sentMails.add(mail);
		} else if (mail.getFrom().equals(FileUtil.DRAFT)) {
			this.draftMails.add(mail);
		} else if (mail.getFrom().equals(FileUtil.OUTBOX)) {
			this.outMails.add(mail);
		}
	}
		
	//删除邮件
	public void delete() {
		Mail mail = getSelectMail();
		if (noSelectData(mail)) return;
		//判断垃圾箱中是否有该份邮件(已经被放到垃圾箱中), 有的话不进行处理
		if (!this.deleteMails.contains(mail)) {
			//从当前的集合中删除
			this.currentMails.remove(mail);
			//加到垃圾箱的集合中
			this.deleteMails.add(0, mail);
			//将邮件对应的xml文件放到deleted的目录中
			this.systemHandler.delete(mail, this.ctx);
		}
		this.currentMail = null;
		//刷新列表
		refreshTable();
		cleanMailInfo();
	}
	
	//彻底删除一封邮件
	private void realDelete() {
		Mail mail = getSelectMail();
		if (noSelectData(mail)) return;
		//从当前的集合中删除 
		this.currentMails.remove(mail);
		//删除xml文件和对应的附件
		this.systemHandler.realDelete(mail, this.ctx);
		this.currentMail = null;
		refreshTable();
		cleanMailInfo();
	}
	
	//获得列表中所选行的xmlName列的值(该值是唯一的)
	private String getSelectXmlName() {
		int row = this.mailListTable.getSelectedRow();
		int column = this.mailListTable.getColumn("xmlName").getModelIndex();
		if (row == -1) return null;
		String xmlName = (String)this.mailListTable.getValueAt(row, column);
		return xmlName;
	}
	
	//查看一封邮件
	private void viewMail() {
		this.mailTextArea.setText("");
		Mail mail = getSelectMail();
		this.mailTextArea.append("发送人:  "   mail.getSender());
		this.mailTextArea.append("\n");
		this.mailTextArea.append("抄送:  "   mail.getCCString());
		this.mailTextArea.append("\n");
		this.mailTextArea.append("收件人:   "   mail.getReceiverString());
		this.mailTextArea.append("\n");
		this.mailTextArea.append("主题:  "   mail.getSubject());
		this.mailTextArea.append("\n");
		this.mailTextArea.append("接收日期:  "   dateFormat.format(mail.getReceiveDate()));
		this.mailTextArea.append("\n\n");
		this.mailTextArea.append("邮件正文:  ");
		this.mailTextArea.append("\n\n");
		this.mailTextArea.append(mail.getContent());
		//添加附件
		this.fileList.setListData(mail.getFiles().toArray());
		//设置当前被打开的邮件对象
		this.currentMail = mail;
		//如果邮件没有被查看过,就修改图标,并保存已经打开的状态
		if (!mail.getHasRead()) {
			//设置邮件已经被查看
			mail.setHasRead(true);
			//更新信封图标
			openEnvelop();
		}
	}
	
	
	//获取在列表中所选择的Mail对象
	private Mail getSelectMail() {
		String xmlName = getSelectXmlName();
		return getMail(xmlName, this.currentMails);
	}
	//从集合中找到xmlName与参数一致的Mail对象
	private Mail getMail(String xmlName, List<Mail> mails) {
		for (Mail m : mails) {
			if (m.getXmlName().equals(xmlName))return m;
		}
		return null;
	}
	
	//初始化时创建各个box中的数据
	private void initMails() {
		this.inMails = this.systemLoader.getInBoxMails(this.ctx);
		this.draftMails = this.systemLoader.getDraftBoxMails(this.ctx);
		this.deleteMails = this.systemLoader.getDeletedBoxMails(this.ctx);
		this.outMails = this.systemLoader.getOutBoxMails(this.ctx);
		this.sentMails = this.systemLoader.getSentBoxMails(this.ctx);
	}
	
	/*
	 * 到服务器中收取邮件
	 */
	public void receive() {
		try {
			System.out.println("接收邮件");
			List<Mail> newMails = this.mailLoader.getMessages(this.ctx);
			//得到Mail对象, 添加到inMails集合中
			this.inMails.addAll(0, newMails);
			//保存到本地的收件箱中
			saveToInBox(newMails);
			//刷新列表
			refreshTable();
		} catch (Exception e) {
			e.printStackTrace();
			showMessage(e.getMessage());
		}
	}
	
	private int showMessage(String s) {
		return JOptionPane.showConfirmDialog(this, s, "警告", 
				JOptionPane.OK_CANCEL_OPTION);
	}
	
	//保存到本地的收件箱中, 具体目录是: 用户名/邮件帐号名/inbox/Mail对象的uuid.xml
	private void saveToInBox(List<Mail> newMails) {
		for (Mail mail : newMails) {
			//生成xml来存放这些新的邮件
			systemHandler.saveInBox(mail, this.ctx);
		}
	}
	
	//在已发送的集合中添加一个邮件对象
	public void addSentMail(Mail mail) {
		this.sentMails.add(0, mail);
		refreshTable();
	}
	
	//在发件箱的集合中添加一个邮件对象
	public void addOutMail(Mail mail) {
		this.outMails.add(0, mail);
		refreshTable();
	}
	
	//在草稿箱的集合中添加一个邮件对象
	public void addDraftMail(Mail mail) {
		this.draftMails.add(0, mail);
		refreshTable();
	}
	
	//刷新列表的方法, 参数是不同的数据
	public void refreshTable() {
		DefaultTableModel tableModel = (DefaultTableModel)this.mailListTable.getModel();
		tableModel.setDataVector(createViewDatas(this.currentMails), getListColumn());
		setTableFace();
	}
	
	//当读取邮件后将图片改变为打开信封图片
	private void openEnvelop() {
		int row = this.mailListTable.getSelectedRow();
		int column = this.mailListTable.getColumn("打开").getModelIndex();
		this.mailListTable.setValueAt(this.envelopOpen, row, column);
		//重新保存邮件状态到xml文件
		this.systemHandler.saveMail(this.currentMail, this.ctx);
	}
	
	/*
	 * 设置方法, 打开设置界面
	 */
	private void setup() {
		if (this.setupFrame == null) {
			this.setupFrame = new SetupFrame(this);
		}
		this.setupFrame.setVisible(true);
	}
	
	//可以让外界重新设界邮箱上下文
	public void setMailContext(MailContext ctx) {
		this.ctx = ctx;
	}
	
	public MailContext getMailContext() {
		return this.ctx;
	}
	
	public MailLoader getMailLoader() {
		return mailLoader;
	}

	public void setMailLoader(MailLoader mailLoader) {
		this.mailLoader = mailLoader;
	}

	private void write() {
		this.mailFrame.setVisible(true);
	}
	
	//没有查看的邮件显示关闭的信封的图片地址
	private static String CLOSE_ENVELOP_PATH = "images/envelop-close.gif";
	//已经查看的邮件显示打开的信封的图片地址
	private static String OPEN_ENVELOP_PATH = "images/envelop-open.gif";
	//信封打开的Icon对象
	private ImageIcon envelopOpen = new ImageIcon(OPEN_ENVELOP_PATH);
	//信封关闭的Icon对象
	private ImageIcon envelopClose = new ImageIcon(CLOSE_ENVELOP_PATH);
	//时间格式对象
	private DateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
	
	//将邮件数据集合转换成视图的格式
	@SuppressWarnings("unchecked")
	private Vector<Vector> createViewDatas(List<Mail> mails) {
		Vector<Vector> views = new Vector<Vector>();
		for (Mail mail : mails) {
			Vector view = new Vector();
			view.add(mail.getXmlName());
			if (mail.getHasRead()) view.add(envelopOpen);
			else view.add(envelopClose);
			view.add(mail.getSender());
			view.add(mail.getSubject());
			view.add(formatDate(mail.getReceiveDate()));
			view.add(mail.getSize()   "k");
			views.add(view);
		}
		return views;
	}
	
	//格式时间
	private String formatDate(Date date) {
		return dateFormat.format(date);
	}
	
	//获得邮件列表的列名
	@SuppressWarnings("unchecked")
	private Vector getListColumn() {
		Vector columns = new Vector();
		columns.add("xmlName");
		columns.add("打开");
		columns.add("发件人");
		columns.add("主题");
		columns.add("日期");
		columns.add("大小");
		return columns;
	}
	
	//设置邮件列表的样式
	private void setTableFace() {
		//隐藏邮件对应的xml文件的名字
		this.mailListTable.getColumn("xmlName").setMinWidth(0);
		this.mailListTable.getColumn("xmlName").setMaxWidth(0);
		this.mailListTable.getColumn("打开").setCellRenderer(new MailTableCellRenderer());
		this.mailListTable.getColumn("打开").setMaxWidth(40);
		this.mailListTable.getColumn("发件人").setMinWidth(200);
		this.mailListTable.getColumn("主题").setMinWidth(320);
		this.mailListTable.getColumn("日期").setMinWidth(130);
		this.mailListTable.getColumn("大小").setMinWidth(80);
		this.mailListTable.setRowHeight(30);
	}
	
	//初始化工具栏
	private void createToolBar() {
		this.toolBar.add(this.in).setToolTipText("收取邮件");
		this.toolBar.add(this.sent).setToolTipText("发送邮件");
		this.toolBar.add(this.write).setToolTipText("写邮件");
		this.toolBar.addSeparator(new Dimension(20, 0));
		this.toolBar.add(this.reply).setToolTipText("回复邮件");
		this.toolBar.add(this.transmit).setToolTipText("转发邮件");
		this.toolBar.add(this.delete).setToolTipText("删除邮件");
		this.toolBar.add(this.realDelete).setToolTipText("彻底删除邮件");
		this.toolBar.add(this.revert).setToolTipText("还原邮件");
		this.toolBar.addSeparator(new Dimension(20, 0));
		this.toolBar.add(this.setup).setToolTipText("设置");
		
		this.toolBar.addSeparator(new Dimension(50, 0));
		this.toolBar.add(this.welcome);
		this.toolBar.setFloatable(false);//设置工具栏不可移动
		this.toolBar.setMargin(new Insets(5, 10, 5, 5));//设置工具栏的边距
		this.add(this.toolBar, BorderLayout.NORTH);
	}
	
	//创建导航的树
	private JTree createTree() {
		//创建根节点
		DefaultMutableTreeNode root = new DefaultMutableTreeNode();
		//加入各个子节点
		root.add(new DefaultMutableTreeNode(new InBox()));
		root.add(new DefaultMutableTreeNode(new OutBox()));
		root.add(new DefaultMutableTreeNode(new SentBox()));
		root.add(new DefaultMutableTreeNode(new DraftBox()));
		root.add(new DefaultMutableTreeNode(new DeletedBox()));
		//创建树
		JTree tree = new JTree(root);
		//加入鼠标监听器
		tree.addMouseListener(new SailTreeListener(this));
		//隐藏根节点
		tree.setRootVisible(false);
		//设置节点处理类
		SailTreeCellRenderer cellRenderer = new SailTreeCellRenderer();
		tree.setCellRenderer(cellRenderer);
		return tree;
	}

	private Object[] emptyListData = new Object[]{};
	
	public void select() {
		MailBox box = getSelectBox();
		if (box instanceof InBox) {
			this.currentMails = this.inMails;
		} else if (box instanceof OutBox) {
			this.currentMails = this.outMails;
		} else if (box instanceof SentBox) {
			this.currentMails = this.sentMails;
		} else if (box instanceof DraftBox) {
			this.currentMails = this.draftMails;
		} else {
			this.currentMails = this.deleteMails;
		}
		//刷新列表
		refreshTable();
		//设置当前打开的邮件对象为空并清空组件
		cleanMailInfo();
	}
	
	//清空当前打开的邮件及对应的界面组件
	public void cleanMailInfo() {
		//设置当前打开的邮件对象为空
		this.currentMail = null;
		this.mailTextArea.setText("");
		this.fileList.setListData(this.emptyListData);
	}
	
	//获得当前选中的box
	private MailBox getSelectBox() {
		TreePath treePath = this.tree.getSelectionPath();
		if (treePath == null) return null;
		//获得选中的TreeNode
		DefaultMutableTreeNode node = (DefaultMutableTreeNode)treePath.getLastPathComponent();
		return (MailBox)node.getUserObject();
	}
}

/**
 * 邮件接收的task对象
 * @author yangenxiong
 *
 */
class ReceiveTask extends TimerTask {

	private MainFrame mainFrame;
	
	public ReceiveTask(MainFrame mainFrame) {
		this.mainFrame = mainFrame;
	}
	
	public void run() {
		try {
			this.mainFrame.getMailContext().getStore();
			this.mainFrame.receive();
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("发生异常, 不接收");
		}
	}

	
}

标签: 类似foxmail_demo

实例下载地址

java 仿foxmail -类似foxmail_demo

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 victor123456 发表于: 2019-09-08 10:59 09
这个例子怎么运行起来用呢

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警