0

Я использую сканер для чтения строк из файла и замены текста в каждой строке на основе заданного шаблона. Это делается внутри API. Моя программа многопоточная. Сразу несколько потоков могут вызывать этот конкретный API.сбой программы java при инициализации сканера

Ниже приводится строка инициализации строки развертки, где нить аварии:

public static void replaceInFile(Properties replacements, Path targetFile) { 
    ... 
    Scanner in = new Scanner(targetFile, "UTF-8"); 
    ... 
} 

Я уверен, что ни один файл не будет доступен на двух потоков одновременно. Может ли кто-нибудь намекнуть мне в правильном направлении относительно того, что происходит?

UPDATE:

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(); 
      } 
} 

Это вызов() нити. Теперь я замечаю, что он показывает «Кадр недоступен» даже перед тем, как войти в метод replaceInFiles BuildUtils, а иногда и после входа туда. Я не могу понять, что не так. Основной поток выходит, я думаю, но ничего не вижу здесь странно, что должно заставить его выйти неожиданно.

+0

Предполагая, что «сбой» вы имеете в виду бросает исключение, вы можете включать в себя сведения об исключении – Misha

+0

I «Извините, я имел в виду, что программа просто выходит. Мой отладчик говорит что-то в строках «рамки недоступны» ... – AshwiniR

+3

Думаю, вам нужно поделиться больше кода здесь. Все, что основано на выше двух строках, будет догадкой ... – Peeyush

ответ

0

Я нашел его. На самом деле это была моя глупость. Я забыл подождать, пока потоки выйдут, и поэтому основной поток вышел даже до того, как потоки могут завершиться. Извините за беспокойство!

Так что теперь я:

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

для всех потоков и выключения службы исполнителя в конце концов блок

Смежные вопросы