java - vfs2 DefaultFileMonitor 线程提前终止

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

我在保持 vfs2 的 DefaultFileMonitor 线程处于 Activity 状态时遇到问题。在监视器对象启动后,执行的主线程就会正常终止。我想知道为什么这个对象不会被“监视”,而是直接走到最后。 (以日志消息“退出......”结束)

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....");
}

最佳答案

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

关于java - vfs2 DefaultFileMonitor 线程提前终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13623537/

相关文章:

Java 索引器速度

java - 以DecoratorPanel内部的GWT DockLayoutPanel + ScrollPanel为中心

java - 将 Action 方法分解为多个函数?

c++ - 未初始化的互斥锁超出范围——清理?

c# - 任务不包含 Run 方法的定义

c++ - 错误:没有用于调用 std::thread 的匹配函数

java - 使用java时进程输入流有限制吗?

linux-kernel - 查看网络文件系统中RPC RMI相关代码

java - Windows机器上无法通过VFS下载文件?

c - 关于linux内核中的文件操作