Salve..
il seguente programma compila,ma crea subito l'eccezione:

java.lang.NoSuchMethodError:main
Exception in thread "main">Exit Code: 1

Il codice è questo:
codice:
//Scrivere un programma Java che generi a caso un significativo numero di espressioni e li conservi 
// in un file di oggetti

import java.io.*;
public class progProva
{
    public void main(String [] args) throws IOException
    {
        /*
        Scrivere un programma JAVA che generi a caso un significativo numero di espressioni e li conservi in un file di oggetti
        */
        String nomeFile = "FileContenenteEspressioni.dat";
        scriviFile(nomeFile);
    }
    
    //Questo è il metodo utilizzato per scrivere le espressioni nel file, il numero di espressioni è casuale
    public void scriviFile(String nomeFile) throws IOException
    {
        
        ObjectOutputStream Oout;//creiamo il file di output che contiene le espressioni aritmetiche in forma infissa
        try
        {
            Oout = new ObjectOutputStream (new FileOutputStream (nomeFile));
        }
        catch(IOException e)
        {
            System.out.println("Si è verificato L'errore: "+e);
            return;
        }
        
        
        int numeroEspressioni = (int)(Math.random()*(100))/*+min*/; //generiamo casualmente il numero di espressioni
        espressioneInfissa exp = null;
        String stringaExp = "";
        for(int i=0; i<numeroEspressioni; i++)//leggendo il numero di espressioni
        {
            stringaExp = generaEspressioni(numeroEspressioni);//richiamiamo il metodo ricorsivo per generare le espressioni in forma infissa
            exp = new espressioneInfissa(stringaExp);
            try
            {
                Oout.writeObject(exp);//scriviamo nel file le espressioni infisse
            }
            catch(IOException e)
            {
                System.out.println ("Scrittura file eseguita "+e);
            }
        }
        
        Oout.close();//chiudiamo il file delle espressioni
        
    }
    
    //Questo è il metodo usato per generare a caso espressioni di forma Infissa
    public static String generaEspressioni(int numeroEspressioni) //throws NoClassDefFoundError 
    {
        String espressione = "";
        espressione = generaEspressioniAux(espressione, numeroEspressioni);
        System.out.println("Espressione:\t"+espressione);
        return espressione;
    }
    
    //Con questo metodo che viene chiamato ricorsivamente formo le espressioni
    public static String generaEspressioniAux(String s, int numeroEspressioni)
    {
        s += '(';
        char [] Operandi = {'+', '-', '/', '*'};
        
        int caso = (int)(Math.random()*100);
        int maxNumExp=numeroEspressioni;
        System.out.println("Espressioni da creare:"+maxNumExp);
        //Uso delle percentuali diverse nei vari casi per evitare che vengano espressioni troppo lunghe
        //Ovviamente potrei usare diverse percentuali per cercare di influenzare un po la lunghezza dell'espressione.
        for(int i=maxNumExp; i<numeroEspressioni; i--)
        {
            if(maxNumExp!=0)
            {
                if(caso < 40)
                {
                    //System.out.println ("uno");
                    s += (int)(Math.random()*100);
                    s += Operandi[(int)(Math.random()*Operandi.length)];
                    s += (int)(Math.random()*100);
                    //System.out.println(s);
                    maxNumExp--;
                }   
                else if(caso <60)
                {
                    //System.out.println ("due");
                    s += (int)(Math.random()*100);
                    s += Operandi[(int)(Math.random()*Operandi.length)];
                    s = generaEspressioniAux(s, numeroEspressioni);
                    maxNumExp--;
                }
                else if(caso < 85)
                {
                    //System.out.println ("tre");
                    s = generaEspressioniAux(s, numeroEspressioni);
                    s += Operandi[(int)(Math.random()*Operandi.length)];
                    s += (int)(Math.random()*100);
                    maxNumExp--;
                }
                else
                {
                    //System.out.println ("quattro");
                    s = generaEspressioniAux(s, numeroEspressioni);
                    s += Operandi[(int)(Math.random()*Operandi.length)];
                    s = generaEspressioniAux(s, numeroEspressioni);
                    maxNumExp--;
                }
                s += ')';
            }
        }
        return s;
    }
}
qualcuno di buona volontà potrebbe dirmi in cosa consiste questa eccezione e come posso risolverla?
GRAZIE