1

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

1 に答える 1

1

DefaultFileMonitorデーモン スレッドのように動作します。つまり、監視スレッドが実行されていても、仮想マシンは終了します。回避策は、無限ループまたは制御下にある別の種類のループで非デーモン スレッドを使用することです。

于 2013-01-12T15:34:17.607 に答える