2012-11-29 44 views
1

我在维护vfs2的DefaultFileMonitor线程时遇到问题。执行的主线程在监视器对象启动后才正常终止。我想知道为什么这个对象不会被“监视”,而是直接到最后。 (与日志消息结束“exitting ......”)vfs2 DefaultFileMonitor线程过早终止

public static void main(String[] args) { 
    try { 
     Options options = new Options(); 

     options.addOption("b", true, "path to the build file"); 
     options.addOption("d", true, "directory to watch"); 
     CommandLineParser parser = new PosixParser(); 
     CommandLine cmd = parser.parse(options, args); 

     String dir = cmd.getOptionValue("d"); 
     String buildFile = cmd.getOptionValue("b"); 

     if(dir == null) { 
      logger.error("No directory specified," + 
          " use [-d 'name_of_dir'] to specify one"); 
      return; 
     } 


     if(buildFile == null) { 
      logger.error("No build file path specified," + 
          " use [-b 'path_to_build_file'] to specify one"); 
      return; 
     } 

     FileSystemManager fsManager = VFS.getManager(); 
     FileObject listendir = fsManager.resolveFile(dir); 


     DefaultFileMonitor fm = new DefaultFileMonitor(new CustomFileListener(buildFile)); 
     fm.setRecursive(true); 
     fm.addFile(listendir); 
     fm.start(); 
    }catch(Exception e){ 
     logger.error("Exception ", e); 
    } 
    logger.info("exitting...."); 
} 

回答

1

DefaultFileMonitor作品像守护线程,即,虚拟机即使监视器线程正在运行终止。解决方法是使用具有无限循环的非守护程序线程或其他类型的循环,并在您的控制之下。