Java завершается на операторе if, выходное значение 0

У меня есть программа, которая считывает строки из файла (с двумя строками) с использованием цикла while (условие bufferedReader.readLine()!=null), присваивает myJSONObject JSON, прочитанный из файла, затем у меня есть статус if (if(bufferedReader.readLine()!=null&&!bufferedReader.readline.matches(DELETE_REGEX)) и если это правда (т.е. если строка, которую мы читаем, не равна нулю, и мы не сопоставляем регулярное выражение), затем выполните некоторую функцию в JSON, которая должна добавить этот новый JSON в файл.

У меня есть это в некоторых блоках try-catch. Это выглядит немного так:

try{
    openFiles;
    while(buff.readLine()!=null){
          try {
              instatiateAndUseJSONParser;
              if(bufferedReader.readLine()!=null
                    &&!bufferedReader.readline.matches(DELETE_REGEX)) 
              {doSomeStuff;}
              else
              {continue;}
          } catch (AllTheExceptions e){e.printStackTrace}
     }
     closeFiles;
}catch(SomeMoreExceptions e){e.printStackTrace}

Когда я запускаю, это переходит к оператору iff, а затем завершается с выходным значением: 0 (программа закрывается как обычно)

Почему это? Он не приближается к «продолжить» или блоку перехвата.

Если я удаляю вторую строку, я получаю NullPointerException из-за строки 50 String Reader, но я не использую StringReader (я пытался импортировать ее, но eclipse подчеркивает ее желтым цветом, и это ничего не меняет). При отладке появляется вкладка для StringReader.<init>(String) line: 50 и просто написано «Источник не найден».

Я новичок в Java, поэтому не совсем понимаю, что происходит. Любая помощь будет оценена по прояснению этого.

Спасибо!


person Pureferret    schedule 27.09.2012    source источник
comment
Я не думаю, что мы сможем дать вам точный ответ, если вы не подтвердите реальный код... или SSCE, который ведет себя так же, как настоящий код.   -  person Stephen C    schedule 27.09.2012
comment
When I run this is gets to the iff statement, and then terminates with exit value:0 (program closed as normal)... Это не правдоподобное объяснение происходящего. Однако опубликованный вами код (скорее всего) настолько отличается от реального кода, что мы не можем дать вам точное объяснение того, что происходит на самом деле и что его вызывает.   -  person Stephen C    schedule 27.09.2012
comment
@StephenC, моя интернет-машина и машина для кодирования разделены, поэтому создание SSCE не так просто, как могло бы быть ... Тем не менее я думаю, что JB решил эту проблему.   -  person Pureferret    schedule 27.09.2012


Ответы (1)


Каждый раз, когда вызывается readLine(), он читает новую строку. Таким образом, вы можете прочитать 3 строки за итерацию в вашем текущем коде. Вы должны присвоить результат первого вызова переменной и использовать эту переменную:

String line = null;
while ((line = buff.readLine()) !=null) {
    try {
        instatiateAndUseJSONParser;
        if (line.matches(DELETE_REGEX)) {
            doSomeStuff;
        }
    } 
    catch (AllTheExceptions e){
        throw new RuntimeException(e);
    }
}

Вы также должны избегать проглатывания исключений.

person JB Nizet    schedule 27.09.2012
comment
Блестяще, я попробую. - person Pureferret; 27.09.2012
comment
Это исправляет эту ошибку, но у меня есть другая, которую я займусь отдельно. Любая идея, почему он завершится, а затем выдаст исключение в зависимости от чтения из файла? - person Pureferret; 27.09.2012
comment
Нет. Вы не предоставляете настоящий код, не предоставляете файл и не предоставляете трассировку стека исключений. У меня нет хрустального шара. - person JB Nizet; 27.09.2012
comment
Это достаточно справедливо, мне было интересно, было ли такое поведение явным признаком чего-то конкретного. Спасибо, в любом случае! - person Pureferret; 27.09.2012