Ho scritto il codice riportato di seguito con l'intento di avere le n frequenze più alte o più basse di un qualsiasi file di testo, ma durante la compilazione mi dà l'errore che ho riportato nel titolo della discussione e non so come ovviare al problema, non ci ho mai capito molto tra static, istanze ecc. Vi ringrazio in anticipo

codice:
import java.awt.event.*;
import java.awt.*;
import javax.swing.*; 

public class FrequenzaFile extends JFrame
{
  private JButton jBNumTop=new JButton("10");
  private JButton jBscelta=new JButton("Scelta file");
  private JFileChooser File_scelta= new JFileChooser();
  private JPanel jPdati= new JPanel();
  private JPanel jPmenu= new JPanel();
  private JButton jBFreqA=new JButton("N frequenze più alte");
  private JButton jBFreqB=new JButton("N frequenze più basse");
  String nomeFile="";
  public FrequenzaFile (int larg,int altezza)
  {   setSize(larg,altezza);
      Container contenitore=getContentPane();
      contenitore.setLayout(new BorderLayout());
      jPmenu.setLayout(new GridLayout(2,3));
      jPmenu.add(jBscelta);jBscelta.addActionListener(new EvButton());
      jPmenu.add(new Label("Numero caratteri più frequenti:"));
      jPmenu.add(jBNumTop); jBNumTop.addActionListener(new EvButton2());
      jPmenu.add(new Label("Quali frequeze desideri?"));
      jPmenu.add(jBFreqA);
      jPmenu.add(jBFreqB);   
      contenitore.add(jPmenu,"North");
      contenitore.add(jPdati,"Center");
  }
  public static void main(String arg[])
  {  FrequenzaFile F_uno=new FrequenzaFile(600,600);
     F_uno.addWindowListener(new ev_Finestra());
    // F_uno.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
     F_uno.setLocation(200,0);
     F_uno.setVisible(true);
  }
  public void paintComponent(Graphics g)
  {   paintComponents(g); paintAll(g);}
  private void visualizza( FrequenzaByte topChar[], int numTotale)
  {   String [] titCol={"codice","car","freq.ass.","freq.rel."};
      jPdati.removeAll();
      jPdati.setLayout(new GridLayout(topChar.length+1, titCol.length));
      for(int i=0; i<titCol.length; i++){
          jPdati.add(new JButton(titCol[i]));
        }
      for(int i=0;i<topChar.length;i++){
          jPdati.add(new JButton(""+(int)topChar[i].carattere));
          jPdati.add(new JButton(""+topChar[i].carattere));
          jPdati.add(new JButton(""+topChar[i].frequenza));
          jPdati.add(new JButton(""+topChar[i].frequenza*100/numTotale+"%"));
        }
      setVisible(true);
  }
  private void aggiorna()
  {  int n=(Integer.parseInt(jBNumTop.getText())+1)%16+5;
      jBNumTop.setText(""+n);
      if(nomeFile.length()==0) selezionaFile();
      else statisticheFile(nomeFile);
  }
  private void selezionaFile()
  {  try{if (File_scelta.showOpenDialog(null)==JFileChooser.APPROVE_OPTION)
            {nomeFile=File_scelta.getSelectedFile().getPath();
             statisticheFile(nomeFile);
            }
         }  
     catch(Exception ex) {System.out.println(ex.getMessage());}
  } 
  private void statisticheFile(String nomefile){
     Frequenze freq=new Frequenze();
     freq.frequenzedaFile(nomeFile);
     int numTop=Integer.parseInt(jBNumTop.getText());
     int totale=freq.conta();
     visualizza(freq.topFrequenze(numTop),totale);
  }
  private void selezionaFrequenza()
  { String freq=JOptionPane.showInputDialog(null,"Di quanti caratteri si desidera la frequeza?","10");
     jBNumTop.setText(freq);
  }
  class EvButton2 implements ActionListener
  { public void actionPerformed(java.awt.event.ActionEvent evt)
      {
          selezionaFrequenza();
      }
  }
  class EvButton implements ActionListener
  {   public void actionPerformed(java.awt.event.ActionEvent evt)
      {  selezionaFile();
      }
  }    
  class ev_Finestra extends WindowAdapter
  { private void windowClosing(WindowEvent event)
      {JOptionPane p1=new JOptionPane();
       int x=p1.showConfirmDialog(null,"Conferma per terminare","ATTENZIONE",2);
       if(x==JOptionPane.YES_OPTION)System.exit(0);
      }
  }    
}

Questa è u altra classe contenuta nella stessa cartelle, non so se può essere d'aiuto:
codice:
import java.io.*;
public class FrequenzaByte
{   char carattere;
    int frequenza;
    public FrequenzaByte(char c, int fr)
    {  carattere=c;
       frequenza=fr;
    }
} 
class Frequenze
{  int[] frequenze= new int[256];
   public Frequenze()
   {  for(int i=0; i<frequenze.length;i++)
          frequenze[i]=0;
   }
   private int indMaxVettore( int [] v)
   {  int indMax=0;
      for(int i=0;i<v.length;i++)
         if(v[indMax]<v[i]) indMax=i;
      return indMax;
   }
   public int conta()
   {  int s=0;
      for(int i=0;i<frequenze.length;i++)
         s+=frequenze[i];
      return s;
   }
   public void frequenzedaFile(String nomeFile)
   {  frequenze=new int[256];
      for(int i=0;i<frequenze.length;i++) frequenze[i]=0;
      RandomAccessFile f;
      try{f=new RandomAccessFile(nomeFile, "rw");
          int byteLetto;
          try{ while((byteLetto=f.readByte())!=-1)
                   frequenze[byteLetto]++;
             }
          finally {f.close();}
         }
      catch(Exception ex) {System.out.println(ex.getMessage());}
   }
   public FrequenzaByte[] topFrequenze(int numTop)
   {  FrequenzaByte[] topByte= new FrequenzaByte[numTop];
      int indMax=0;
      for(int i=0;i<topByte.length;i++){
         topByte[i]=new FrequenzaByte((char)indMax,frequenze[indMax]);
         frequenze[indMax]=0;
      }
      return topByte;
   }
}