2011-05-11 39 views
0

如何在Java中将return语句添加到watchable方法中,并且仍然正常工作。我总是想要搜索文件,好吧,我有。但现在我想要得到回报,但是当我添加返回语句时,一切都停止了,函数停止了,可见的停止点也停止了。任何想法?将return语句添加到Java中的watchable中

for (;;) { 
    WatchKey key = watcher.take(); 
    for (WatchEvent<?> event: key.pollEvents()) { 
     if (event.kind() == StandardWatchEventKind.ENTRY_CREATE) { 
      System.out.println(event.context().toString()); 
    } 
} 

这里是总是搜索,如何从它返回并仍然工作的循环?

+0

东西听起来很奇怪。要在哪里返回该值?为什么你想要返回值? – Kaj 2011-05-11 06:53:56

回答

0

由于@dlev说,如果你希望你的应用程序在同一时间处理事件的手表,因为它是做其他的事情,然后要做到这一点的方法是在一个单独的线程。

这给您留下了“返回”信息的问题。 (我认为只是将信息打印到标准输出对您没有任何用处。)

正如您所看到的那样,您不能使用return,因为那样会终止循环。

基本的答案是,您需要将信息放在某个地方,以便其他应用程序可以访问。例如:

  • 您可以创建一个队列对象(例如ConcurrentLinkedQueue),有你的守望者排队该数据,并有一些其他线程出队,并对其进行处理。

  • 您可以让观察者自己处理事件有效载荷,并将结果放入共享数据结构中。

但是,没有更多信息,很难决定哪种方法最适合您。

+0

thak你们两个,我会去第一个 - ConcurrentLinkedQueue因为传递的数据是a'lot,我认为这是更好的选择:) – user639285 2011-05-11 07:28:00

+0

我想问你,我这样做的东西.. \t LinkedBlockingQueue queue = new LinkedBlockingQueue (); \t queue.put(classes.Watchable.Whatch_Directory.create_watchable(“dir”)); \t 但一切都从类.Watchable等这是功能与watchable班一切下来他没有显示,仍然只有watchable正在运行。 – user639285 2011-05-11 09:26:42

2

我认为你的意思是你想在程序中执行其他操作,同时仍然让观察者运行。对于这一点,你需要创建并启动观察者新Thread

Thread watcherThread = new Thread(new Runnable() { 
    public void run() { 
     // Watcher loop code goes here 
    } 
}); 
watcherThread.start();