0
私は自分の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) {
}
}
のようにそれを呼び出す:私は、Singletoパターンを提案し、このようなあなたのホットフォルダのクラスを記述します \t \t this.running = running; \t \t IF(ランニング){ \t \t \t this.start()。 \t \t} \t} – user7076183
[OK]をスレッドを1つ以上のものを開始することはできません。ランナブルを使用するようにコードを変更します。 – bracco23
まだ幸運なことではありませんが、何度かスレッドがnullになってしまいます。停止ボタン(HotFolder.getInstance()。setRunning(false)メソッドを呼び出しています)をクリックしても、まだ新しいファイルがフォルダに作成されていることを記録しています)。 – user7076183