2015-11-09 3 views
2

У меня есть этот метод, который должен загрузить файл, но он дает мне эту ошибку:Java BufferedReader ошибка Ьги блок

NamnMetod.java:175: error: unreported exception FileNotFoundException; must be caught or declared to be thrown 
       BufferedReader inFil = new BufferedReader(new FileReader(fil)); 
                 ^
NamnMetod.java:177: error: unreported exception IOException; must be caught or declared to be thrown 
       String rad = inFil.readLine(); 
              ^

Это мой код:

public static void hämtaFrånText() { 
    try { 
    EventQueue.invokeAndWait(new Runnable() { 
    @Override 

     public void run() { 
       String aktuellMapp = System.getProperty("user.dir"); 
      JFileChooser fc = new JFileChooser(aktuellMapp); 
      int resultat = fc.showOpenDialog(null); 

       if (resultat != JFileChooser.APPROVE_OPTION) { 
       JOptionPane.showMessageDialog(null, "Ingen fil valdes!"); 
       System.exit(0); 
       } 
       String fil = fc.getSelectedFile().getAbsolutePath(); 
       String[] namn = new String[3];   
       String output ="";   
       BufferedReader inFil = new BufferedReader(new FileReader(fil));      
       String rad = inFil.readLine(); 

       int antal = 0; 

        while(rad != null){     
         namn[antal] = rad; 
         rad = inFil.readLine(); 
         antal++; 
        } 
        inFil.close(); 

     } 
    });      
    }catch(IOException e2) {   
     JOptionPane.showMessageDialog(null,"The file was not found!"); 
    }   
} 

Я озадачен, потому что я поймал как IOException, так и FileNotFoundException, но я все еще получаю эту ошибку ...

+0

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

+1

Попробуйте положить try-catch внутри 'public void run()' -method. –

+2

@ UmaKanth Я думаю, что соглашение об именах в порядке; это просто происходит на шведском языке. –

ответ

2

Вы поймаете их в коде, который создаетRunnable, тогда как исключения должны быть уловлены вRunnable.run().

Переместите попытку/уловку в свой метод run.

Кроме того, использование примерочных с-ресурсами, чтобы гарантировать, что FileReader всегда замкнут, даже если возникает исключение:

try (FileReader fr = new FileReader(fil); 
    BufferedReader inFil = new BufferedReader(fr)) { 
    // ... 

    // No need to close `fr` or `inFil` explicitly. 
} 
0

Ниже решение:

public static void hämtaFrånText() { 

     try { 
      EventQueue.invokeAndWait(new Runnable() { 

       @Override 
       public void run() { 
        try { 
         String aktuellMapp = System.getProperty("user.dir"); 
         JFileChooser fc = new JFileChooser(aktuellMapp); 
         int resultat = fc.showOpenDialog(null); 

         if (resultat != JFileChooser.APPROVE_OPTION) { 
          JOptionPane.showMessageDialog(null, "Ingen fil valdes!"); 
          System.exit(0); 
         } 
         String fil = fc.getSelectedFile().getAbsolutePath(); 
         String[] namn = new String[3]; 
         String output = ""; 
         BufferedReader inFil = new BufferedReader(new FileReader(fil)); 
         String rad = inFil.readLine(); 

         int antal = 0; 

         while (rad != null) { 
          namn[antal] = rad; 
          rad = inFil.readLine(); 
          antal++; 
         } 
         inFil.close(); 
        }catch(FileNotFoundException e1) { 
         JOptionPane.showMessageDialog(null,"The file was not found!"); 
        } 
        catch(IOException e2) { 
         JOptionPane.showMessageDialog(null, "Failed!"); 
        } 
       } 
      }); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (InvocationTargetException e) { 
      e.printStackTrace(); 
     } 

    } 

Reason: пробег метод из Runnable и в eventQueue он определен и в определении метода нет места, где исключение обрабатывается или добавляется в throw в заявлении о декларации метода. Следовательно, FileNoFoundException и IOException должны указываться внутри метода, а не снаружи.

Кроме того, исключенное исключение InterruptedException было выбрано EventQueue, и я добавил еще один try catch для обработки этого исключения.

Надеюсь, это поможет.

+0

И что именно показывает это решение? Ответы, которые выгружают большую кучу кода, не очень полезны, если они фактически не объясняют, что вы изменили. –

0

У вас проблема с прицелом.

Попробовать и поймать использовании будет ловить исключение hämtaFrånText() Но не метода run()

Исключение может произойти внутри метода run не из боковой.

Попробуй-Cathc, который вы указали, будет заботиться только об исключениях, которые происходят в его объеме, поскольку вы не выбрасываете это исключение, это не ваш метод hämtaFrånText(), чтобы заботиться о том, что происходит внутри run().

Если run был вашим определенным методом, вы могли бы их бросить. Но теперь только у вас есть возможность поймать их внутри метода run().

Так что попробуйте

public void run() { 
try{ 
............. 
........... 

    }catch(FileNotFoundException e1) { 
     JOptionPane.showMessageDialog(null,"The file was not found!"); 
     } 
    catch(IOException e2) { 
     JOptionPane.showMessageDialog(null, "Failed!"); 
    } 
} 
0

Попробовать-задвижку блок принадлежит в бега() - Метод «Runnable» - этот запуск() - метод не должен бросать никаких исключений. Отправка Runnable не будет генерировать исключения.

0

Вы должны переместить свой улов блок TRY внутри метода выполнения, который должен сделать трюк, а также вы должны обрабатывать InvocationTargetException и InterruptedException брошенной EventQueue.invokeAndWait(Runnable) скомпилировать класс правильно.

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