//这是BEAN
package com.wisdom.smsendmanager;
import java.io.Serializable;
//import com.wisdom.smsendmanager.servlet.AddrRelationshipServlet;
import javax.servlet.http.*;
import java.util.*;
import com.wisdom.smsendmanager.AddrManager;public class TaskBean implements Runnable, Serializable {
private int counter;
private int sum;
private boolean started;
private boolean running;
private int sleep;
public HttpSession session;
private int radio;
private Vector vcSource;
private Vector vcDesFiledName; public TaskBean() {
counter = 0;
sum = 0;
started = false;
running = false;
sleep = 1000; } protected void work() {
try {
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!");
//Thread.sleep(sleep);
System.out.println("*******************");
AddrManager addrManager = new AddrManager();
int fileRecordNum = vcSource.size();
for (int i=1; i < fileRecordNum; i++){
 Vector vcRecord = (Vector) vcSource.get(i);
addrManager.ImportData("1", "TelephoneNoteTemplate",
"TelephoneNote", radio,
vcRecord, vcDesFiledName); counter++;
System.out.println(counter);
//counter = Math.round((counter/fileRecordNum)*10);
System.out.println("X YYY      HHHH     eeee OO+++====="+counter); }
} catch (Exception e) {
setRunning(false);
}
}  public void setRadio(int radio)
  {
  this.radio = radio;
  }
  public int getRadio()
  {
  return radio;
  }
  public void setVcSource(Vector vcSource)
 {
 this.vcSource = vcSource;
 System.out.println(vcSource);
 }
 public Vector getVcSource()
 {
 return vcSource;
 }
 public void setVcDesFiledName(Vector vcDesFiledName)
{
   this.vcDesFiledName = vcDesFiledName;
}
public Vector getVcDesFiledName()
{
   return vcDesFiledName;
}//新加获得暂停时间/////////////////////////////
public int getSleepTime()
{
  return sleep;
}
public void setSleepTime(int recordNum)
{
  if(recordNum<5)
  {
this.sleep = 1;
  }
  else
  {
this.sleep = recordNum / 5;
  }
}
/**
 * 启动进度条
 */
/*
public void start()
{ //session.removeAttribute("task");
TaskBean task = new TaskBean();
task.setRunning(true);
new Thread(task).start();
}*/
/**
 * 停止进度条
 */
/*
public void stop()
{
TaskBean task = new TaskBean();
task.setRunning(false);
}*/
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
public synchronized int getPercent() {
return counter;
} public synchronized boolean isStarted() {
return started;
} public synchronized boolean isCompleted() { return counter == 100;
} public synchronized boolean isRunning() {
return running;
} public synchronized void setRunning(boolean running) {
this.running = running;
if (running)
started = true;
} public synchronized Object getResult() {
if (isCompleted())
return new Integer(sum);
else
return null;
} public void run() {
try {
setRunning(true);
while (isRunning() && !isCompleted())
work();
}catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
setRunning(false);
} }}

解决方案 »

  1.   

    进度条JSP
    <%@ page contentType="text/html;charset=GB2312" %>
    <%@ page import=" com.wisdom.smsendmanager.TaskBean" %><jsp:useBean id="task" scope="session" class=" com.wisdom.smsendmanager.TaskBean"/><HTML><HEAD>
        <TITLE>文件导入进度</TITLE>
        <%
    //int time =
    if (task.isRunning()) {
        %>
            <SCRIPT LANGUAGE="JavaScript">
                setTimeout("location='status.jsp'", 1000);
            </SCRIPT>
        <% } %>
    </HEAD><BODY>    <H1 ALIGN="CENTER">文件导入进度:</H1>
    <%! int per;%>
            <% int percent = task.getPercent();%>
            已完成:<%= percent %>%
    <%
    int per = percent/2;
    %>
        </H2>    <TABLE WIDTH="40%" ALIGN="CENTER"
                BORDER=1 CELLPADDING=0 CELLSPACING=0>
            <TR>
                <% for (int i = 0; i <= per ; i += 1) { %>
                    <TD WIDTH="1%" BGCOLOR="#000080">&nbsp;</TD>
                <% } %>
                <% for (int i = 49; i >= per; i -= 1) { %>
                    <TD WIDTH="1%" bgcolor="cccccc">&nbsp;</TD>
                <% } %>
            </TR>
        </TABLE>    <TABLE WIDTH="100%" BORDER=0 CELLPADDING=0 CELLSPACING=0>
            <TR>
                <TD ALIGN="CENTER">
                    <% if (task.isRunning()) { %>
                        正在执行
                    <% } else { %>
                        <% if (task.isCompleted()) { %>
                            完成
                        <% } else if (!task.isStarted()) { %>
                            尚未开始
                        <% } else { %>
                            已停止
                        <% } %>
                    <% } %>
                </TD>
            </TR>
            </TR>
        </TABLE></BODY></HTML>
      

  2.   

    这是SERVLET
    package com.wisdom.smsendmanager.servlet;import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    import java.util.*;
    import java.lang.Math;
    import com.wisdom.smsendmanager.*;
    public class AddrRelationshipServlet extends HttpServlet {
      private static final String CONTENT_TYPE = "text/html; charset=GBK";
      private HttpServletRequest request;
     private HttpServletResponse resposne;
     private int leng = 0;                    //存储目标字段长度
     private int radio =1;            //导入类型
     private String strBranchID = null;
     private String ssymb = null;
     private Vector vcDestination;
     private Vector vcSource;
     private String sourceName = null;
     public Vector desVec;
     private Vector vcDesFieldName;
     private HttpSession session;
     private int recordNum;
    // private int counter;  //Initialize global variables
      public void init() throws ServletException {
      }  //Process the HTTP Get request
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    this.request = request;
    this.resposne = resposne;
    PrintWriter out = response.getWriter();  leng = Integer.parseInt(request.getParameter("desNameLeng"));
     radio = Integer.parseInt(request.getParameter("radio"));  session = request.getSession();
     vcDesFieldName = (Vector)session.getAttribute("sessionDesFieldName");
     vcSource = (Vector)session.getAttribute("sessionFileData");
     int fileRecordNum = vcSource.size();
     vcDestination = vcDesFieldName; ///*调用肖娜的导入数据类,进行数据导入
    //AddrManager addrManager = new AddrManager();
    TaskBean taskBean = new TaskBean();
    taskBean.setRadio(radio);
    taskBean.setVcDesFiledName(vcDesFieldName);
    taskBean.setVcSource(vcSource);
    try
     {
     //还需要处理
     taskBean.start();
     RequestDispatcher requestDispatcher=request.getRequestDispatcher("./nclsmsendmanage/status.jsp");
     requestDispatcher.forward(request,response);  }
     catch(Exception ex)
     {
     ex.printStackTrace();
     }
      }
      public final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{
      doGet(request,response);
     }
      //Clean up resources
      public void destroy() {
      }
    }
      

  3.   

    public void start()
    { //session.removeAttribute("task");
    TaskBean task = new TaskBean();
    task.setRunning(true);
    new Thread(task).start();
    }
    1.我觉得这个里面的逻辑有问题,你的多线是对应另一个新的TaskBean task = new TaskBean()的线程
    2.还有你jsp中的调用javaBean也是一个静态的过程,只能获得一次当前的进度条的状态,而且应该是0%
    如果你的代码就是这样的话
    3。建议你单独在javaBean中写个main()函数来测试,先不用servlet