如何在Java中将return语句添加到watchable方法并且仍然正常工作。我想要总是搜索文件,好吧,我有。但是现在我想得到回报,但是当我添加return语句时,一切都停止了,函数停止了,并且监视也停止了......有什么想法吗?
for (;;) {
WatchKey key = watcher.take();
for (WatchEvent<?> event: key.pollEvents()) {
if (event.kind() == StandardWatchEventKind.ENTRY_CREATE) {
System.out.println(event.context().toString());
}
}
以下是总是搜索的循环,如何从它返回并仍然有效?
答案 0 :(得分:2)
我认为你的意思是你想要在程序中执行其他操作,同时仍然让观察者运行。为此,您需要为观察者创建并启动新的Thread
:
Thread watcherThread = new Thread(new Runnable() {
public void run() {
// Watcher loop code goes here
}
});
watcherThread.start();
答案 1 :(得分:0)
正如@dlev所说,如果您希望应用程序在执行其他操作的同时处理监视事件,那么执行此操作的方法是在单独的线程中。
这使您无法“返回”信息。 (我认为简单地将信息打印到标准输出对你没有任何用处。)
正如您所观察到的,您无法使用return
,因为这将终止循环。
基本答案是您需要将信息放在某处,以便应用程序的其余部分可以访问。例如:
您可以创建一个队列对象(例如ConcurrentLinkedQueue
),让您的观察者将数据排入队列,让其他线程将其出列并处理它。
您可以让观察者处理事件有效负载本身并将结果放入共享数据结构中。
但是,如果没有更多信息,很难确定哪种方法最适合您。