java - Not able to stop the listener using separate method -


i have create file watcher using org.apache.commons.io.monitor.filealterationmonitor. file changes captured correctly. want stop monitor task using separate method. not working. source code below.

import java.io.file; import java.io.ioexception; import java.util.scanner;  import org.apache.commons.io.filedeletestrategy; import org.apache.commons.io.fileutils; import org.apache.commons.io.monitor.filealterationlisteneradaptor; import org.apache.commons.io.monitor.filealterationmonitor; import org.apache.commons.io.monitor.filealterationobserver; import org.apache.commons.io.monitor.fileentry; public class filemonitor2 {       //public final class filemonitorexample {          private static final string example_path =                 "d:\\testrail\\install.txt";          private static final string parent_dir1 =                 "d:\\ibi\\devstudio77\\client\\wfc\\etc";         private static final string parent_dir2 =                 "d:\\ibi\\devstudio77\\config";          public static void runexample(boolean b) {             system.out.println("file monitor example...");             filealterationmonitor monitor=new filealterationmonitor();              // fileentry              // can monitor changes , information files             // using methods of class.             if(b){             fileentry entry = new fileentry(fileutils.getfile(example_path));              system.out.println("file monitored: " + entry.getfile());             system.out.println("file name: " + entry.getname());             system.out.println("is file directory?: " + entry.isdirectory());               // file monitoring              // create new observer folder , add listener             // handle events in specific directory , take action.             file parentdir = fileutils.getfile(parent_dir1);              filealterationobserver observer = new filealterationobserver(parentdir);             observer.addlistener(new fla2());             file parentdir1 = fileutils.getfile(parent_dir2);              filealterationobserver observer2 = new filealterationobserver(parentdir1);            // observer.addlistener(new fla());             observer2.addlistener(new fla());             // add monior check events every x ms,             // , attach different observers want.             monitor.addobserver(observer);             //monitor = new filealterationmonitor(500, observer);             monitor.addobserver(observer2);             try {                 monitor.start();                 system.out.println("started");                 // after attached monitor, can create files , directories                 // , see happens!                  //monitor.stop();             } catch (ioexception e) {                 e.printstacktrace();             } catch (interruptedexception e) {                 e.printstacktrace();             } catch (exception e) {                 e.printstacktrace();             }             }else{             /*system.out.println("type value");             scanner sc=new scanner(system.in);               string ss=sc.next();             if(ss.equals("aa")){*/             try {                 monitor.stop();                 system.out.println("stopped");              } catch (ioexception e) {                 e.printstacktrace();             } catch (interruptedexception e) {                 e.printstacktrace();             } catch (exception e) {                 e.printstacktrace();             }           //  }             }         }         public static void main(string args[]) throws interruptedexception{             runexample(true);             system.out.println("after start");             thread.sleep(1000);             runexample(false);         }     //} } 

when runexample(false) called second time, monitor recreated. need called monitor.stop() on instance created when called runexample(true). can save monitor static variable after created first time. subsequent calls runexample(false) has access original instance of monitor.

you can fix declaring monitor outside of runexample method, , create new monitor if true passed:

static filealterationmonitor monitor;  public static void runexample(boolean b) {     if (b) {         monitor = new filealterationmonitor();     } else {         if (monitor == null) return;         monitor.stop();     } } 

Comments

Popular posts from this blog

c++ - Difference between pre and post decrement in recursive function argument -

php - Nothing but 'run(); ' when browsing to my local project, how do I fix this? -

php - How can I echo out this array? -