그래서 데몬 스레드에서 볼 필요가있는 프로세스가 있지만 처음 두 스레드 모두 Thread.sleep()을 중지하면 프로세스가 중지됩니다. 예를 들어 : 그래서스레드 중 하나가 응답을 멈 춥니 다
ProcessBuilder pb = new ProcessBuilder(argsList);
pb.directory(new File("path"));
Process process = pb.start();
new ProcessListenerDaemon(clientName, username, process).start();
, ProcessListenerDaemon는 실행 지연()
@Override
public void run(){
try{;
while(isProcessAlive()){
Thread.sleep(SLEEP_TIME * 1000);
doSomethisng();
}
System.exit(0);
} catch (InterruptedException e){
e.printStackTrace();
}
}
그것은 (예를 들어 20 초) 지연이 너무 깁니다 IT가 될 것입니다 경우는, 일어나하지 않습니다이있다 너무 짧아서 (1 초) 제대로 작동하지만 프로세스가 중단됩니다 (아마도 Thread.sleep()을 호출합니다) 무엇이 문제입니까?
질문에 대한 답변이 부족합니다. ProcessListenerDaemon을 시작한 후 메인 스레드는 무엇을합니까? isProcessAlive() 메소드에서 수행되는 작업은 무엇입니까? doSomething()에? 내 생각 엔이 메서드 중 하나가 교수형에 처해 있고 sleep() 메서드는 아닙니다. –
2 개의 스레드를 시작하는 것을 볼 수 있습니다. ProcessBuilder는 스레드와 ProcessListenerDaemon에서 프로세스를 시작합니다. ProcessBuilder의 코드와 isProcessAlive()를 검사하고있는 코드를 제공해 주실 수 있습니까? isProcessAlive()가 루프를 종료하기위한 신호를 제대로 보내지 않으면 문제가 발생할 수 있습니다. –
Thread.sleep()이 실행되지 않은 후 System.out.println()을 사용하여 코드 및 코드 실행을 추적했습니다. isProcessAlive() 만 process.exitValue()를 확인하십시오. 또한 주 스레드는 SwingWorker이며 ProcessListenerDaemon을 시작한 후에 JFrame을 처리하지만 dispose()를 제거하더라도 작동하지 않습니다. isProcessAlive() 제대로 작업, 내가 쓴 것처럼 지연 ProcessListenerDaemon 잘 작동하는 경우, 응답하지 않는 프로세스가 응답하지 않습니다. – javakun