我已经定义了一个名为“folderwatcher”的类(可调用),它正在监视特定文件夹的任何更改。主要代码在一个无限循环中,类似于: Monitor a Directory for Changes using Java。我希望调用此“folderwatcher”的方法/类来侦听“folderwatcher”发现的任何事件并根据该事件执行一些操作。有谁知道我该怎么做?我需要事件处理程序吗?有什么例子吗?谢谢
问问题
644 次
2 回答
3
首先,使用无限循环的方法是错误的。如果您真的在使用,Callable
那么您已经在使用ExecutorService
. 您应该使用的是 aScheduledExecutorService
并将您的代码安排为重复的任务。
就事件处理程序而言,这并不难实现,例如:
interface FileDetectedHandler { void fileDetected(File f); }
public static void main(String[] args) {
final ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
final FileDetectedHandler h = new FileDetectedHandler(File f) {
public void fileDetected(File f) {
System.out.format("File detected: %s\n", f);
}};
final Runnable r = new Runnable() { public void run() {
File f = null;
//detect file
if (f != null) h.fileDetected(f);
}};
scheduler.scheduleWithFixedDelay(r, 0, 2, TimeUnit.SECONDS);
}
于 2012-08-22T09:36:44.757 回答
0
使用回调。这可以通过在父对象上实现同步方法,然后将对父对象的引用传递给可运行对象的构造函数来完成。然后,runnable 可以调用父级的方法来通知它一些事情。
http://en.wikipedia.org/wiki/Callback_(computer_programming )
于 2012-08-22T09:31:51.577 回答