vfs2 DefaultFileMonitor线程过早终止

时间:2012-11-29 10:20:27

标签: java multithreading vfs apache-commons-vfs file-monitoring

我无法保持vfs2的DefaultFileMonitor线程处于活动状态。执行的主要线程在监视器对象启动后正常终止。我想知道为什么这个对象不会“监视”而只是直接到最后。 (以日志消息“exitting ....”结尾)

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 个答案:

答案 0 :(得分:1)

DefaultFileMonitor的工作方式类似于守护程序线程,即即使监视器线程正在运行,虚拟机也会终止。解决方法是使用具有无限循环的非守护程序线程或受您控制的其他类型的循环。