Java выдает мне ошибку «java.io.ioexception никогда не добавляется в тело соответствующего оператора try» - PullRequest
0 голосов
/ 02 мая 2018

Итак, я делаю программу, которая отображает изображения из файлов .ppm. У меня работает другая версия, но теперь я перешел к другой части, которая читает несколько изображений из одного и того же документа и в основном использует это для анимации с небольшой задержкой между переключением изображений, а затем появилась следующая ошибка, и я полностью озадачен этим:

java.io.ioexception is never thrown in body of corresponding try statement

Любая помощь будет высоко ценится.

  public void renderAnimatedImage(){       
    String image = UI.askString("Filename: ");
    int keepingCount =0;      //Variables
    int numCount = 1;    
    try{
        Scanner fileScan = new Scanner(image);    // making scanners
        Scanner scan = new Scanner(image);
        File myFile = new File(image);      //making files
        File myFile2 = new File(image);
        int num = 0;

        while(scan.hasNextLine()){
           String Line = scan.nextLine();

           Scanner keywordSc = new Scanner (Line);
           while(keywordSc.hasNext()) {
               String Keyword = keywordSc.next();
               if (Keyword.equals("P3")) {
                   num++;
                }
                else { break; }
            }
        }



        while (keepingCount< numCount) {
            this.renderImageHelper(scan);   // calling upon an earlier method which works.
            keepingCount++;
        }
    }
    catch(IOException e) {UI.printf("File failure %s \n", e); }



}

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Могу поспорить, что вы думаете, что может быть IOException из-за этой строки:

 Scanner fileScan = new Scanner(image);    // making scanners

Но эта линия не делает то, что вы думаете, что делает. Поскольку image является String, будет использоваться конструктор Scanner(String). Но этот конструктор обрабатывает свой аргумент как строку для сканирования, а не как имя файла для сканирования.

Следовательно, new Scanner(image) не выполняет никаких операций ввода-вывода и не объявляется как выдача IOException.

И остальная часть кода в блоке тоже не выдаст IOException. Методы Scanner next / hasNext, которые вы используете, вызовут другое исключение, если во время чтения возникнет ошибка ввода-вывода. (Проверьте Javadocs.)


Кроме того, вы, кажется, неправильно понимаете, что File является / делает.

File myFile = new File(image);      //making files

Комментарий неверный. Это не делает файл.

На самом деле, он создает File объект, который является представлением в памяти имени файла / пути. Создание объекта File не приводит к созданию файла в файловой системе. (Опять же, проверьте Javadocs.)

0 голосов
/ 02 мая 2018

Это означает, что код, который вы пишете внутри вашего try / catch, никогда не вызывает IOException, что делает это предложение ненужным. Вы можете просто удалить его и оставить свой код без него.

...