我只是无法弄清楚这个问题的原因。
问题 :
1) 我正在使用 Thread.Sleep 函数为我的应用程序设置计时器。
2)现在,一旦用户进入网页,计时器就会启动,如果用户点击任何链接,计时器(线程)就会停止,然后新的计时器就会启动。
3)如果他们在 3 秒内没有活动,则计时器结束,与网页相关的工作流程也随之结束。
代码 :
下载SummariesPage.java
public DownloadSummariesPage(){
abc = new SimpleThread(this);
Link<Void> link = new Link<Void>("downloadSummaryLink") {
public void onClick() {
boolean threadStatus = abc.checkStatus();
if (threadStatus) {
abc.interrupt();
abc.stop();
abc = new SimpleThread(DownloadSummariesPage.this);
abc.start();
}
else
{
LOG.debug("thread is dead now");
endWorkflow();
LOG.debug("ending the workflow");
setResponsePage(MenuPage.class);
}
}
};
abc.start();
}
public void endWorkflow() {
abc.interrupt();
abc.stop();
boolean downloadReport = false;
LOG.debug("before action 201 inside endworkflow");
Map<String, Serializable> inputs = new HashMap<String, Serializable>();
inputs.put("downloadReport", downloadReport);
try {
wf.doAction(id, 201, inputs);//do not worry about this its for workflow
String empty = "";
populateDownloadReportDatabase(empty);
setResponsePage(MenuPage.class);
} catch (Exception e) {
LOG.debug("Exception while performing 201 workflow, getControlCancel "
+ e);
}
}
}
我的下一个创建线程的类是 SimpleThread.java
class SimpleThread extends Thread {
private static final Logger LOG = Logger.getLogger(SimpleThread.class);
boolean stillActive = true;
DownloadSummariesPage dsp;
SimpleThread(DownloadSummariesPage dp) {
this.dsp = dp;
}
public void run() {
// 5sec timer
LOG.debug("inside run method");
try {
Thread.sleep(3000);
stillActive = false;
} catch (InterruptedException e) {
LOG.debug("Exception in thread " + e);
e.printStackTrace();
}
LOG.debug("before endworkflow");
dsp.endWorkflow();//so this is what i actually want to do...
LOG.debug("at the end of simplethread");
}
public boolean checkStatus() {
return stillActive;
}
}
案例:
1)发生了什么:用户登录线程休眠,用户单击链接线程停止并创建一个新链接,如果用户再次单击它再次发生,现在如果用户在 3 秒内不做任何事情,SimpleThread 类中的 stillAlive 变量设置为 false当现在用户点击它时,它完美地结束了工作流程......
2)我想要什么:如果用户登录线程启动,并且如果用户没有活动,则仍然Alive变量设置为false,并且dsp.endWorkflow();
语句现在应该结束工作流程。正确的 ?但它只是在到达endWorkflow()
函数内部后停止,实际上并没有结束工作流程......
希望你明白这一点,我尽我所能使其易于理解。谢谢你的时间..
我很感激任何帮助..