Java实时进度条的操纵类
package com.dotmin.web.java.progress; /** * 实时进度条操纵类 * @author Administrator */ public class ProgressBarCommon { /** * 换行符 */ private final String NEW_LINE = "\r\n"; /** * 获取进度条页面的基础HTML * @return */ public String getBaseHtml(String user, String now) { StringBuilder builder = new StringBuilder(); builder.append("<%@ page pageEncoding=\"UTF-8\"%><head>" + NEW_LINE); builder.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />" + NEW_LINE); builder.append("<title>短信发送进度</title>" + NEW_LINE); builder.append("<link href=\"Sms.css\" rel=\"stylesheet\" type=\"text/css\">" + NEW_LINE); builder.append("<script language=\"javascript\" type=\"text/javascript\">" + NEW_LINE); builder.append("var g_inits = 3;" + NEW_LINE); builder.append("var g_tels = 500;" + NEW_LINE); builder.append("var g_lates = 2;" + NEW_LINE); builder.append("var g_barmax = 500;" + NEW_LINE); builder.append("//设置指定名称元素的内容" + NEW_LINE); builder.append("function setTxt(elemName, elemText){" + NEW_LINE); builder.append(" document.getElementById(elemName).innerHTML = elemText;" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//设置指定名称元素的宽度" + NEW_LINE); builder.append("function setPos(elemName, elemWidth){" + NEW_LINE); builder.append(" document.getElementById(elemName).style.width = elemWidth + \"px\";" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//根据当前位置和最大位置,获取子进度条长度" + NEW_LINE); builder.append("function getBarPos(pos, maxnum){" + NEW_LINE); builder.append(" var barpos = Math.ceil(pos * g_barmax / maxnum);" + NEW_LINE); builder.append(" if(barpos<1){" + NEW_LINE); builder.append(" return 1;" + NEW_LINE); builder.append(" }else if(barpos>g_barmax){" + NEW_LINE); builder.append(" return g_barmax;" + NEW_LINE); builder.append(" }else{" + NEW_LINE); builder.append(" return barpos;" + NEW_LINE); builder.append(" }" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//初始化个数" + NEW_LINE); builder.append("function setInits(inits){" + NEW_LINE); builder.append(" g_inits = inits;" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//总号码数" + NEW_LINE); builder.append("function setTels(tels){" + NEW_LINE); builder.append(" g_tels = tels;" + NEW_LINE); builder.append(" setTxt(\"tels\", tels);" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//清理数" + NEW_LINE); builder.append("function setLates(lates){" + NEW_LINE); builder.append(" g_lates = lates;" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//进度条1的文本, 进度" + NEW_LINE); builder.append("function b1(txt, pos){" + NEW_LINE); builder.append(" setTxt(\"txt1\", txt);" + NEW_LINE); builder.append(" setPos(\"bar1\", getBarPos(pos, g_inits));" + NEW_LINE); builder.append(" setTxt(\"tip1\", pos + \"/\" + g_inits);" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//进度条2的文本, 进度" + NEW_LINE); builder.append("function b2(txt, pos){" + NEW_LINE); builder.append(" setTxt(\"txt2\", txt);" + NEW_LINE); builder.append(" setPos(\"bar2\", getBarPos(pos, g_tels));" + NEW_LINE); builder.append(" setTxt(\"tip2\", pos);" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//进度条3的成功进度" + NEW_LINE); builder.append("function b31(pos){" + NEW_LINE); builder.append(" setPos(\"bar3\", getBarPos(pos, g_tels));" + NEW_LINE); builder.append(" setTxt(\"tip3\", pos);" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//进度条3的失败文本" + NEW_LINE); builder.append("function b32(txt){" + NEW_LINE); builder.append(" setTxt(\"txt3\", txt);" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//进度条4的文本, 进度" + NEW_LINE); builder.append("function b4(txt, pos){" + NEW_LINE); builder.append(" setTxt(\"txt4\", txt);" + NEW_LINE); builder.append(" setPos(\"bar4\", getBarPos(pos, g_lates));" + NEW_LINE); builder.append(" setTxt(\"tip4\", pos + \"/\" + g_lates);" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//发送成功" + NEW_LINE); builder.append("function succ(millisec){" + NEW_LINE); builder.append(" setTxt(\"ret_result\", \"发送成功!\");" + NEW_LINE); builder.append(" setTxt(\"ret_text\", \"群发耗时:\" + (millisec / 1000) + \"秒\");" + NEW_LINE); builder.append(" alert(\"发送成功!\");" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//发送失败的原因" + NEW_LINE); builder.append("function error(txt){" + NEW_LINE); builder.append(" setTxt(\"ret_result\", \"群发失败!\");" + NEW_LINE); builder.append(" setTxt(\"ret_text\", txt);" + NEW_LINE); builder.append(" alert(\"群发失败!\");" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("//停止发送" + NEW_LINE); builder.append("function smsStop(){" + NEW_LINE); builder.append(" try{" + NEW_LINE); builder.append(" var req;" + NEW_LINE); builder.append(" if (window.ActiveXObject) {" + NEW_LINE); builder.append(" req = new ActiveXObject(\"Microsoft.XMLHTTP\");" + NEW_LINE); builder.append(" } else if (window.XMLHttpRequest) {" + NEW_LINE); builder.append(" req = new XMLHttpRequest();" + NEW_LINE); builder.append(" } else {" + NEW_LINE); builder.append(" alert(\"当前系统不支持此操作!\");" + NEW_LINE); builder.append(" return;" + NEW_LINE); builder.append(" }" + NEW_LINE); builder.append(" req.open(\"GET\", \"SmsStopServlet\", true);" + NEW_LINE); builder.append(" req.onreadystatechange = function(){" + NEW_LINE); builder.append(" if (req.readyState == 4) {" + NEW_LINE); builder.append(" if (req.status != 200) {" + NEW_LINE); builder.append(" alert(\"中止失败!\" + req.statusText);" + NEW_LINE); builder.append(" }" + NEW_LINE); builder.append(" }" + NEW_LINE); builder.append(" };" + NEW_LINE); builder.append(" req.send();" + NEW_LINE); builder.append(" }catch(e){" + NEW_LINE); builder.append(" alert(\"出错了!\" + e.message);" + NEW_LINE); builder.append(" }" + NEW_LINE); builder.append("}" + NEW_LINE); builder.append("</script>" + NEW_LINE); builder.append("</head>" + NEW_LINE); builder.append("<table width=\"600\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\" class=\"jason_sms_word\">" + NEW_LINE); builder.append(" <input type=\"button\" onclick=\"location.href='Sendindex.jsp'\" value=\"返回首页\" />" + NEW_LINE); builder.append(" <input type=\"button\" onclick=\"location.href='TelList.jsp'\" value=\"返回群发页面\" />" + NEW_LINE); builder.append(" <input type=\"button\" onclick=\"smsStop()\" value=\"停止发送\" />" + NEW_LINE); builder.append(" </td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\"><label id=\"txt1\"></label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td width=\"500\" height=\"30\">" + NEW_LINE); builder.append(" <div style=\"width:508px; height:20px; background-color:#CCC; border:double\">" + NEW_LINE); builder.append(" <div id=\"bar1\" style=\"width:1px; height:100%; background-color:#66F\"></div>" + NEW_LINE); builder.append(" </div>" + NEW_LINE); builder.append(" </td>" + NEW_LINE); builder.append(" <td> <label id=\"tip1\">0/0</label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\"><label id=\"txt2\"></label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\">" + NEW_LINE); builder.append(" <div style=\"width:508px; height:20px; background-color:#CCC; border:double\">" + NEW_LINE); builder.append(" <div id=\"bar2\" style=\"width:1px; height:100%; background-color:#66F\"></div>" + NEW_LINE); builder.append(" </div>" + NEW_LINE); builder.append(" </td>" + NEW_LINE); builder.append(" <td> 已发送<label id=\"tip2\">0</label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\"><label id=\"txt3\"></label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\">" + NEW_LINE); builder.append(" <div style=\"width:508px; height:20px; background-color:#CCC; border:double\">" + NEW_LINE); builder.append(" <div id=\"bar3\" style=\"width:1px; height:100%; background-color:#66F\"></div>" + NEW_LINE); builder.append(" </div>" + NEW_LINE); builder.append(" </td>" + NEW_LINE); builder.append(" <td> 成功数<label id=\"tip3\">0</label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\"><label id=\"txt4\"></label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\">" + NEW_LINE); builder.append(" <div style=\"width:508px; height:20px; background-color:#CCC; border:double\">" + NEW_LINE); builder.append(" <div id=\"bar4\" style=\"width:1px; height:100%; background-color:#66F\"></div>" + NEW_LINE); builder.append(" </div>" + NEW_LINE); builder.append(" </td>" + NEW_LINE); builder.append(" <td> <label id=\"tip4\">0/0</label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append("</table>" + NEW_LINE); builder.append("<table width=\"600\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\">" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\">" + NEW_LINE); builder.append(" 号码数量:<label id=\"tels\">0</label> 个" + NEW_LINE); builder.append(" </td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\">" + NEW_LINE); builder.append(" 短信内容:<label id=\"content\"></label>" + NEW_LINE); builder.append(" </td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\">群发结果:<label id=\"ret_result\"></label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append(" <tr>" + NEW_LINE); builder.append(" <td height=\"30\" colspan=\"2\" class=\"jason_sms_word\"><label id=\"ret_text\"></label></td>" + NEW_LINE); builder.append(" </tr>" + NEW_LINE); builder.append("</table>" + NEW_LINE); return builder.toString(); } /** * 设置指定名称元素的内容 * @param inits * @return */ public String getTxt(String elemName, String elemText) { return "<script>setTxt(\"" + clearLine(elemName) + "\", \"" + elemText + "\")</script>"; } /** * 设置初始化总数 * @param inits * @return */ public String getInits(int inits) { return "<script>setInits(" + inits + ")</script>"; } /** * 设置号码总数 * @param mails * @return */ public String getTels(int tels) { return "<script>setTels(" + tels + ")</script>"; } /** * 设置清理总数 * @param lates * @return */ public String getLates(int lates) { return "<script>setLates(" + lates + ")</script>"; } /** * 进度条1 * @param txt 显示文本 * @param pos 进度 * @return */ public String getBar1(String txt, int pos) { return "<script>b1(\"" + clearLine(txt) + "\", " + pos + ")</script>"; } /** * 进度条2 * @param txt 显示文本 * @param pos 进度 * @return */ public String getBar2(String txt, int pos) { return "<script>b2(\"" + clearLine(txt) + "\", " + pos + ")</script>"; } /** * 进度条3,成功 * @param pos 进度 * @return */ public String getBar3(int pos) { return "<script>b31(" + pos + ")</script>"; } /** * 进度条3,失败 * @param txt 显示文本 * @return */ public String getBar3(String txt) { return "<script>b32(\"" + clearLine(txt) + "\")</script>"; } /** * 进度条4 * @param txt 显示文本 * @param pos 进度 * @return */ public String getBar4(String txt, int pos) { return "<script>b4(\"" + clearLine(txt) + "\", " + pos + ")</script>"; } /** * 群发成功 * @return */ public String getSucc(long times) { return "<script>succ(" + times + ")</script>"; } /** * 群发失败 * @param txt 失败原因 * @return */ public String getErr(String txt) { return "<script>error(\"" + clearLine(txt) + "\")</script>"; } /** * 第一次Flush时的内容至少要有256字节 * @return 返回至少256个字符 */ public String check256byte(String src) { while(src.length() < 256){ src += " "; } return src; } /** * 去掉换行符 * @param srcStr 原内容 * @return 去掉换行符后的内容 */ private String clearLine(String srcStr){ if(srcStr.contains("\n")){ srcStr = srcStr.replaceAll("\n", " "); } if(srcStr.contains("\"")){ return srcStr.replaceAll("\"", "'"); } return srcStr; } }
调用示例:
package progress; public class MailSendProgress { private PrintWriter write; private ProgressBarCommon proBar; public MailSendProgress(PrintWriter write) { this.write = write; proBar = new ProgressBarCommon(); writeScript(proBar.getBaseHtml()); writeScript(proBar.getBar1("正在保存发送日志", 1)); for(int i=0; i<ListTel.size(); i++){ if(stoped()){ printScript(proBar.getErr("用户请求中止发送!")); return; } sendSMS(……); } } /** * 即时输出内容 * @param script 要输出的脚本内容 */ private void writeScript(String script){ write.println(script); write.flush(); } /** * 检查运行状态 * @return true申请中止 false可继续运行 */ private boolean stoped(){ return null == session.getAttribute("SMS_RUNNING"); } }
Servlet页面:
package progress; public class MailSendServlet extends HttpServlet implements Servlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setCharacterEncoding("UTF-8"); resp.setHeader("content-type","text/html;charset=UTF-8"); //输出基础内容 MailSendProgress mailSendProgress = new MailSendProgress(resp.getWriter()); resp.flushBuffer(); //获取参数 String txt_sender = req.getParameter("txt_sender"); String txt_content = req.getParameter("txt_content"); //转码 txt_sender = (null==txt_sender) ? "" : new String(txt_sender.getBytes("ISO-8859-1"), "UTF-8"); txt_content = (null==txt_content) ? "" : new String(txt_content.getBytes("ISO-8859-1"), "UTF-8"); } }
发送中止Servlet:
package com.dotmin.web.java.progress; public class SmsStopServlet extends HttpServlet implements Servlet { private static final long serialVersionUID = 1L; @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setHeader("cache-control", "no-cache"); resp.setHeader("pragma", "no-cache"); resp.setHeader("expires", "0"); req.getSession().setAttribute("SMS_RUNNING", null); } }
相关推荐
### Java 实现显示进度条 #### 背景与需求 在软件开发过程中,特别是涉及到长时间运行的任务时,向用户展示任务完成进度是一项非常实用的功能。进度条是实现这一功能的一种常见方式。本文将详细介绍如何使用Java...
在Java编程中,实时读取日志和实现进度条是两个重要的功能,广泛应用于系统监控、调试和用户界面的交互性提升。以下是对这两个知识点的详细讲解。 首先,让我们来看看如何在Java中实时读取日志。日志是程序运行过程...
在现代Web应用中,用户界面的交互体验是至关重要的,其中实时进度条是一个常见的功能,特别是在数据上传、下载或者后台处理任务时。本资源提供的"前后台交互的实时进度条"是一个实现这一功能的解决方案,它能兼容...
Java进度条是指在Java GUI开发中,使用JProgressBar组件来显示进度的控件。JProgressBar可以显示进度的百分比,例如下载文件、安装软件等过程中,JProgressBar可以实时显示当前进度。 在本例中,我们使用了...
"基于Comet属性同步的Java Web实时进度条研究" 本文研究了基于Comet属性同步的Java Web实时进度条的实现方案。该方案通过结合Comet技术和Java的反射技术,实现了Java Web实时进度条的处理方式。该方案的优势在于纯...
本主题将深入探讨如何在Java多线程环境下实现进度条功能。 首先,理解Java多线程的基本概念至关重要。Java通过Thread类和Runnable接口来支持多线程。创建一个新线程通常有两种方式:继承Thread类并重写run()方法,...
实现Java进度条主要涉及GUI(图形用户界面)和多线程技术。以下是对Java进度条实现的详细解释: 1. **Swing和AWT库**:在Java中,我们通常使用Swing或AWT库来创建图形用户界面,这两个库提供了丰富的组件,包括...
Java的命令行进度条JCmdLineProgress是一种在控制台或者终端显示进度的工具,它能够为执行时间较长的任务提供可视化反馈,使用户了解程序运行的状态。在开发命令行应用程序时,这种工具尤其有用,因为它可以帮助用户...
### Java开发页面进度条知识点详解 #### 一、概述 在Web应用开发中,为了提升用户体验,页面加载进度条已经成为了一种常见的UI组件。通过Java技术实现页面进度条不仅可以直观地展示页面或数据加载的过程,还能增强...
在Java Web开发中,实现一个带进度条的异步上传功能是常见的需求,尤其是在处理大文件上传时,用户界面的反馈至关重要。这个“java带进度条的异步上传”示例利用了Servlet、Ajax以及可能的JavaScript库,如jQuery,...
"java带进度条大文件上传"的实现主要涉及到以下几个关键知识点: 1. **虚拟内存技术**:传统的文件上传方式可能会遇到内存限制,特别是对于大文件,一次性读入整个文件到内存可能导致服务器崩溃。为了解决这个问题...
在Java编程中,创建一个带有进度条的文件拷贝程序是一项实用技能,尤其对于那些希望增强用户界面体验的开发者来说。下面将详细讲解这个“JAVA 带进度条的文件拷贝程序”的核心知识点。 首先,我们需要理解的是,...
#### 二、Java进度条的实现 ##### 1. 导入必要的包 首先,我们需要导入Java Swing中的相关包,包括`javax.swing.JFrame`, `javax.swing.JPanel`, `javax.swing.JButton`, `javax.swing.JProgressBar`, `java.awt....
如果使用Java,我们可以利用Swing或JavaFX的GUI组件创建进度条,结合线程池或Future接口来监控任务进度。在微服务或分布式系统中,可以利用消息队列(如RabbitMQ或Kafka)配合事件驱动设计,将进度信息发送到前端...
Java的命令行进度条是开发基于控制台的Java应用程序时常用的一种增强用户体验的工具。它在执行长时间运行的任务时,如文件传输、大型数据处理或系统扫描时,为用户提供可视化的进度反馈。JCmdLineProgress库就是为了...
Java下载进度条模块是用于在Java应用程序中展示文件下载进度的一种可视化组件,它通常与网络I/O操作结合,为用户提供实时的下载状态反馈。在这个NetBeans工程中,开发者可以找到如何构建这样一个功能的实例。 首先...
Java进度条是用户界面(UI)设计中常见的一种元素,用于提供给用户关于长时间运行任务的进度反馈。在Java编程中,我们可以使用Java Swing或JavaFX库来创建进度条。以下将详细介绍如何在Java中实现进度条功能,以及...
Netty+H5实现实时进度条文件上传,支持断点续传。 1、WebSocketServer:服务启动类 2、服务启动后,浏览器访问http://localhost:9999 3、FileWebSocketFrameHandler类SERVER_SAVE_PATH常量为文件上传保存路经
本篇文章将深入探讨如何使用Java中的`JProgressBar`类来创建和管理进度条。 `JProgressBar`是Java Swing库中的一个组件,属于javax.swing包。它提供了一种可视化的方式,用以展示任务完成的百分比或者进度。`...