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
Post a Comment