2011-05-11 3 views
0

return 문을 Java의 감시 가능 메소드에 추가하고 올바르게 작동하는 방법. 항상 파일을 검색하고 싶습니다. 알았습니다. 하지만 이제는 수익을 얻고 싶습니다.하지만 return 문을 추가하면 모든 기능이 중지되고 감시가 중지됩니다. 어떤 아이디어입니까?Java에서 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

이상하게 들립니다. 값을 어디에서 돌려주고 싶습니까? 왜 그 값을 돌려주고 싶니? – Kaj

답변

0

:이를 위해 생성하고 감시자를위한 새로운 Thread을 시작해야합니다 그것을하는 방법은 별도의 스레드에 있습니다.

이렇게하면 정보를 "반환하는"문제가 있습니다. (표준 출력에 단순히 정보를 출력하는 것은 당신에게 아무런 소용이 없다고 생각합니다.)

관찰 한대로 return을 사용할 수 없으므로 루프가 종료됩니다.

기본적인 대답은 나머지 응용 프로그램이 액세스 할 수 있도록 정보를 어딘가에 배치해야한다는 것입니다. 예를 들어 :

  • 당신은 큐 개체를 만들 수 있습니다 (예를 들어, ConcurrentLinkedQueue), 당신의 감시자가 데이터를 대기열에, 그리고이를 처리 큐에서 다른 스레드를 가지고 있습니다.

  • 감시자가 이벤트 페이로드 자체를 처리하고 결과를 공유 데이터 구조에 넣을 수 있습니다.

그러나 더 많은 정보가 없으면 어떤 접근 방식이 가장 적합할지 결정하기가 어렵습니다.

+0

thak 둘 다, 내가 처음으로 갈거야 - ConcurrentLinkedQueue 전달 된 데이터가 a'lot이고 나는 그것이 더 나은 옵션이라고 생각합니다 :) – user639285

+0

나는 당신에게 내가하고 싶은 걸 묻고 싶습니다. \t LinkedBlockingQueue queue = new LinkedBlockingQueue (); \t queue.put (classes.Watchable.Whatch_Directory.create_watchable ("dir")); \t 하지만 class.Watchable에서부터 아래까지 모두 watchable 클래스가있는 함수이며, watchable 클래스 만 실행 중입니다. – user639285

2

당신은 프로그램에서 다른 작업을 수행하고 싶지만 감시자를 계속 실행하고 싶다고 생각합니다. @dlev이 말한대로 당신이 다른 일을하고 같은 시간에 시계 이벤트를 처리하는 응용 프로그램을 원한다면 다음,

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