我已经尝试了几乎所有方法来完成这项工作,但似乎我没有找到正确的方向。
这是实际情况:我在 Netbeans7.3 下使用 JSF2.2 和 GlashFish7。我的 JSF 应用程序应该创建第二个线程来运行(异步)无限循环。在这个无限循环中,我使用 WatchService (NIO) 检查特定文件夹的更改。WatchService 函数在单线程驱动的 jsf 页面中运行良好。但是我会在循环期间做其他事情,所以我需要这个异步方法,但我无法在单独的线程中运行它。
这是我的java类:
@Stateless
public class NewFile {
@Asynchronous
public void showNewFile() throws IOException{
WatchService watchService = FileSystems.getDefault().newWatchService();
WatchKey watchKey = Paths.get("/home/user/input").register(watchService,new WatchEvent.Kind<?>[] { ENTRY_CREATE, ENTRY_MODIFY, ENTRY_DELETE });
while (true) {
try {
watchKey = watchService.take();
} catch (InterruptedException ex) {
System.out.println("InterruptedException: " + ex);
}
for (WatchEvent<?> watchEvent : watchKey.pollEvents()) {
System.out.println(watchEvent.kind() + " " + ((Path) watchEvent.context()));
}
watchKey.reset();
}
}
}
In this class I call the methode:
@Named("startWatcher")
public class StartWatcher {
private NewFile newFile;
public void runSearcher() throws IOException{
newFile.showNewFile();
}
}
以及你的 index.xhtml 中的相关部分
<h:commandButton actionListener="#{startWatcher.runSearcher()}" value="test"/>
我希望你能理解我的问题,我知道我的英语不是很好。我期待收到提示我做错了什么。