java程序在扫描仪初始化时崩溃

java程序在扫描仪初始化时崩溃,java,multithreading,thread-safety,java-8,java.util.scanner,Java,Multithreading,Thread Safety,Java 8,Java.util.scanner,我使用扫描仪从文件中读取行,并根据给定的模式替换每行中的一些文本。这是在API中完成的。我的程序是多线程的。一次,多个线程可以调用这个特定的API 以下是线程崩溃的行扫描程序初始化行: public static void replaceInFile(Properties replacements, Path targetFile) { ... Scanner in = new Scanner(targetFile, "UTF-8"); ... } 我确信两个线程不会同

我使用扫描仪从文件中读取行,并根据给定的模式替换每行中的一些文本。这是在API中完成的。我的程序是多线程的。一次,多个线程可以调用这个特定的API

以下是线程崩溃的行扫描程序初始化行:

public static void replaceInFile(Properties replacements, Path targetFile) {
    ...
    Scanner in = new Scanner(targetFile, "UTF-8");
    ...
}
我确信两个线程不会同时访问单个文件。有人能告诉我发生了什么事吗

更新:

public Void call() throws Exception {
        Iterator it = paths.iterator();
        while(it.hasNext()){
          try {
            String filePath = it.next().toString();
            //BuildUtil replacer = new BuildUtil();
            BuildUtil.replaceInFile(replacements, Paths.get(filePath));
          } catch(Exception e) {
             e.printStackTrace();
          }
}

这是线程的调用()。现在我观察到,它显示“Frame not available”,甚至在进入BuildUtils的replaceInFile方法之前,有时在进入该方法之后。我无法找出问题所在。。我想主线程正在退出,但我没有看到任何奇怪的事情发生,这应该会使它意外退出。

我找到了它。其实是我的愚蠢。我忘记了等待线程退出,因此主线程甚至在线程完成之前就退出了。对不起打扰了

所以现在我要:

for (int i = 0; i < threadsUsed; i++) {
  pool.take().get();
}
for(int i=0;i

对于所有线程,在finally block中关闭executor服务

假设“崩溃”是指抛出异常,可以包含异常详细信息吗对不起,我的意思是程序刚刚退出。我的调试器在“frame not available”(帧不可用)行中说了一些话……我认为您需要在这里共享更多代码。基于以上两行的任何内容都将是猜测…我将很快更新。同时,当我单步通过另一个包中定义的API时,它会将我带到.class文件中。有没有办法进入实际的源文件进行调试?我使用的是intelliJ Editori如果整个应用程序都退出了,是什么让您如此确信,执行发布行的这个线程就是原因?