2016-11-03 1 views
0

La ligne avec "static static BufferedReader" est où le problème réside. "exception non signalée java.io.FileNotFoundException; doit être interceptée ou déclarée être levée" est l'erreur. Voici mon code actuel:Erreur de jet. Comment puis-je réparer cela? J'ai essayé beaucoup de choses, mais je suis nouveau à lui et la logique est un peu au-delà de moi

import java.io.*; 
import java.util.*; 

public class PG2ERC 
{  
    private static ArrayList<Integer> arl = new ArrayList<Integer>(); 
    private static BufferedReader br = new BufferedReader(new FileReader("pageRefString.txt")); 
    public static void main(String[] args) throws IOException, FileNotFoundException 
    { 
     String [] arr; 
     int n1 = 3; 
     int n2 = 4; 
     int f; 
     int pf1 = 0; 
     int pf2 = 0; 
     arr = br.readLine().split(" "); 
     for(String s:arr) 
     { 
      f=Integer.parseInt(s); 
      if(arl.contains(f)) 
      { 
       arl.remove(arl.indexOf(f)); 
       arl.add(f); 
      } 
      else if(arl.size() < n1) 
      { 
       ++pf1; 
       arl.add(f); 
      } 
      else 
      { 
       arl.remove(0); 
       arl.add(f); 
       ++pf1; 
      } 


      f=Integer.parseInt(s); 
      if(arl.contains(f)) 
      { 
       arl.remove(arl.indexOf(f)); 
       arl.add(f); 
      } 
      else if(arl.size() < n2) 
      { 
       ++pf2; 
       arl.add(f); 
      } 
      else 
      { 
       arl.remove(0); 
       arl.add(f); 
       ++pf2; 
      } 
      try (Writer writer = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream("pg2out.txt")))) 
      { 
       writer.write(("Number of page faults is ") + pf1); 
       writer.write(("Number of page faults is ") + pf2); 
      } 
     }  
    } 
} 
+0

réduire toujours des questions à un [mcve]. Dans ce cas, * aucun * du code de votre méthode principale est pertinent. Vous pourriez démontrer le tout avec juste quelques lignes. –

Répondre

0

Définir vos variable statique BufferedReader à null en dehors de la méthode main. et initialiser dans main méthode va résoudre le problème.

private static BufferedReader br = null; 
    public static void main(String[] args) throws IOException, FileNotFoundException 
    { 
     br = new BufferedReader(new FileReader("pageRefString.txt")); 
2

Le problème est plus simplement démontré comme ceci:

import java.io.*; 

class Test { 
    private static Reader reader = new FileReader("foo.txt"); 
} 

Le problème est que la statique initialiseur pour votre classe peut lancer une exception. C'est entièrement séparé de votre méthode main.

Maintenant, dans votre cas, la solution la plus simple est de changer vos champs aux variables locales:

// No need to declare FileNotFoundException - it's a subclass of IOException anyway 
public static void main(String[] args) throws IOException 
{ 
    ArrayList<Integer> arl = new ArrayList<Integer>(); 
    BufferedReader br = new BufferedReader(new FileReader("pageRefString.txt")); 
    ... rest of method as before ... 
} 

À ce moment-là, le code qui peut lancer une exception est dans une méthode qui déclare que ces exceptions peut être jeté, alors ça va.

Si vous ne besoin d'initialiser les variables statiques comme celui-ci, vous devez le faire dans un bloc statique d'initialisation:

private static BufferedReader br; 
static { 
    try { 
     br = new BufferedReader(new FileReader("pageRefString.txt")); 
    } catch (IOException e) { 
     // Go bang hard - RuntimeException isn't a checked exception 
     throw new RuntimeException(e); 
    } 
}