泰勒不要停下来



我已经在我的程序中实现了一个tailerListener,但是当我启动它时,它永远不会停止。

下面是我的程序:

public class PostClient{
private static File file = new File("../file.txt");
public static void main(String [] args){    
//      TAILER LISTENER
    TailerListenerAdapter listener = new MyTailerListener();
    Tailer tailer = new Tailer(file, listener, 500);
    Executor executor = new Executor() {
          public void execute(Runnable command) {
              command.run();
           }
    };
    System.out.println("Execution of the tailer");
    executor.execute(tailer);
    System.out.println("Stop tailer");
    tailer.stop(); 

与我的类MyTailerListener

import org.apache.commons.io.input.TailerListenerAdapter;
public class MyTailerListener extends TailerListenerAdapter {
    public void handle(String line) {
        System.out.println(line);
    }
}

一开始,我设法去了裁缝店。停止(所以我的程序停止了,很好),但是在写了一些其他行并触摸了一些东西之后,它不再工作了。

奇怪的是,当我将MyTailerListener类替换为:

public void handle(String line) {
    final String logEntryPattern = "(\w+\s+\d+\s+\d{2}:\d{2}:\d{2})\s+(\S+)\s+(\S+):\s+(.+)";
    final Pattern p = Pattern.compile(logEntryPattern);
    final Matcher matcher = p.matcher(line);
System.out.println("Total groups: " + matcher.groupCount());
System.out.println("Date&Time: " + matcher.group(1));
System.out.println("Hostname: " + matcher.group(2));
System.out.println("Program Name: " + matcher.group(3));
System.out.println("Log: " + matcher.group(4));
}

我刚从一个答案中挑选出来,但它与我的文件无关。然后我的程序停止…

我认为这是因为它找不到匹配者。当我删除除第一个之外的所有sysout时,我的程序不会停止。

您实现Executor的方式是,尾部在同一线程中运行。您可能想要做的是创建一个新线程来执行MyTailerListener。试一试。

Thread tailerThread=new Thread(tailer);
tailerThread.start();
System.out.println("Stop tailer");
tailerThread.stop();
但是请注意,通常不鼓励使用Thread.stop(),因为它不允许线程干净地终止。此外,在这个特定的示例中,线程可能在完成任何工作之前就被终止。你可能不想这样。另一种快速的方法是在停下来之前等一秒钟。Thread.sleep(1000);),但您应该真正定义何时(在何种条件下)应该停止程序,并清晰地实现它。

相关内容

  • 没有找到相关文章

最新更新