이 문제의 원인을 파악할 수 없습니다.스레드가 멈 추면 워크 플로를 종료 할 수 없습니다.
문제 :
1) 내 응용 프로그램에 대한 타이머를 설정하는 Thread.sleep를 기능을 사용하고 있습니다.
2) 이제 사용자가 웹 페이지에 들어가 자마자 타이머가 시작됩니다. 사용자가 링크를 클릭하면 타이머 (스레드)가 중지 된 다음 새 타이머가 시작됩니다.
3) 3 초 동안 아무 활동도 없다면 타이머가 끝나고 웹 페이지와 관련된 워크 플로도 끝납니다.
코드 :
:DownloadSummariesPage.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);
}
}
}
내 다음 수업 스레드를 생성
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;
}
}
케이스 SimpleThread.java입니다
1) Whats Happening : 사용자 로그인 스레드가 잠자기, 사용자가 링크를 클릭하면 멈추고 사용자가 다시 클릭하면 다시 생성되며 사용자가 3 초 동안 아무 것도하지 않으면 SimpleThread 클래스의 stillAlive 변수 false로 설정되고 이제는 사용자가 작업 흐름을 완벽하게 끝낼 때 ...
2) 내가 원하는 것 : 사용자가 스레드를 시작하고 해당 사용자가 활동을하지 않으면 stillAlive 변수가 false로 설정됩니다. false이고 dsp.endWorkflow();
문이 워크 플로를 종료해야합니다. 권리 ? 그러나 실제로는 endWorkflow()
함수 내부에 도달 한 후에 멈추고 워크 플로를 실제로 끝내지는 않습니다 ...
희망 사항을 이해할 수 있도록 최선을 다했습니다. 시간 내 주셔서 감사합니다 ..
내가 어떤 도움을 주셔서 감사합니다..
귀하의 모든 노력에 감사드립니다. 감사합니다. 그것들은 변수 downloadReport (도달 할 수 없음)에 문제가 없지만 abc.stop()을 사용하여 SimpleThread 클래스 (dsp.endWorkflow)에서 호출 할 때이 명령문이 실행되지 않는 이유를 알아 내려고합니다. 이것에 대한 의견 ..? 고마워요. – Ashish
내가 말했듯이 스레드에서 2 초가 생각 나면 사용자 클릭을 고려하십시오. 처음에는 '인터럽트'를 호출 한 다음 '중지'합니다. 그래서 이것은 여러분이 인터럽트 할 때 쓰레드가 잠에서 깨어나고 코드의 나머지 부분을 수행 한 후에 멈추는 것이 가능합니다. 당신은 방해하지 않고 멈추게 할 수 있습니다. –