내 UI에서 오는 요청에 따라 HotFolder를 보는 요구 사항이 있습니다. 내 UI에서 시작 및 중지 버튼이 있습니다. 시작을 클릭하면 코드가 폴더를보고 클릭해야합니다. 그것을 멈추지 말아야한다. HotFolder를보기 위해 시계 서비스를 사용하고 있으며, 내 컨트롤러에서 플래그를 전달하여 서비스 시청을 시작하고 폴더 시청을 중지합니다. 폴더를 보는 것을 어떻게 멈추게 할 수 있습니까? 여기 시계 서비스 스레드를 죽이는 방법
는 코드 조각입니다 :@RequestMapping(value = "/start", method = RequestMethod.GET)
public ModelAndView hotFolder()
{
ModelAndView model = new ModelAndView();
model.setViewName("welcomePage");
HotFolder h = new HotFolder();
h.hotfolderTesting(true);
return model;
}
@RequestMapping(value = "/stop", method = RequestMethod.POST)
public ModelAndView hotFolderStop()
{
ModelAndView model = new ModelAndView();
model.setViewName("welcomePage");
HotFolder h = new HotFolder();
h.hotfolderTesting(false);
return model;
}
HotFolder.java : 나는 내가 당신이라고 생각하게 주석을 볼 수 있기 때문에, 당신은 언급하지 않았다 확실히 뭔가가
public void hotfolderTesting(boolean flag)
{
try (WatchService service = FileSystems.getDefault().newWatchService()) {
Map<WatchKey, Path> keyMap = new HashMap<>();
Path path = Paths.get("E:\\TestingWatch");
keyMap.put(path.register(service, StandardWatchEventKinds.ENTRY_CREATE), path);
WatchKey watchKey;
if (flag) {
while (true) {
watchKey = service.take();
for (WatchEvent<?> event : watchKey.pollEvents()) {
if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
System.out.println("Created: " + event.context());
} else if (event.kind() == StandardWatchEventKinds.ENTRY_DELETE) {
System.out.println("Deleted: " + event.context());
} else if (event.kind() == StandardWatchEventKinds.ENTRY_MODIFY) {
System.out.println("Modified :" + event.context());
}
}
if (!watchKey.reset()) {
break;
}
}
}
} catch (Exception ignored) {
}
}
처럼 전화 : I는 Singleto 패턴을 제안,이처럼 HotFolder 클래스를 작성합니다 \t \t this.running = running; \t \t 경우 (실행) { \t \t \t this.start(); \t \t \t} – user7076183
좋아요. 스레드를 여러 개 이상 시작할 수없는 것 같습니다. 실행 파일을 사용하도록 코드를 변경하겠습니다. – bracco23
아직 운이 없다 : (일부 스레드가 null이되는 .. 그리고 몇 번이나 .. 내가 HotFolder.getInstance(). setRunning (false) 메소드를 호출하고있는 중지 버튼을 클릭하더라도 여전히 폴더를보고 ..) 여전히 폴더에 생성 된 새 파일을 로깅합니다.) – user7076183