java程序在扫描仪初始化时崩溃
我使用扫描仪从文件中读取行,并根据给定的模式替换每行中的一些文本。这是在API中完成的。我的程序是多线程的。一次,多个线程可以调用这个特定的API 以下是线程崩溃的行扫描程序初始化行: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"); ... } 我确信两个线程不会同
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如果整个应用程序都退出了,是什么让您如此确信,执行发布行的这个线程就是原因?