codice:
public class GestioneInfoMatrici {

	    private int Righe;             
	  //  private int infoMatrici[][];  
	    private StringTokenizer st;
	    private HashMap<String,Info>map;   
	    private Info I;
	    
        public GestioneInfoMatrici(int r) {
        st=null;   Righe=r;    map= new HashMap<String, Info>(r);    I=null;
        }	    
	    
	    public void PosizionaInHashMap(String r){
                  //DA RENDERE PIU EFFICIENTE
	       st=new StringTokenizer(r," ");
           String K=st.nextToken();
           
	           int nR=Integer.parseInt(st.nextToken());
		       int nC=Integer.parseInt(st.nextToken());
               I=new Info(nR, nC); 	 
               map.put(K,I);
// da cacciare......................................               
                Info P= (Info) map.get(K);
                System.out.println(P.getRiga()+"la prima hash map "+P.getCol());
	    }
	    
        public void StampaHashMap(){
               System.out.println("Ecco le chiavi-->"+ map.keySet());     
        } 	    
	    
        public HashMap getHashMap(){
        	return map;
        }
	   
        public Info getInfoSuM(String  k){
        	Info C= (Info) map.get(k);
        	return C;
        }
        
        void InserInHashMap(String k,Info I){
        	//inserire nel caso non c'è la chiave altrimenti modificare il valore dell'oggetto Info
        	
        }
       	
}
//////////////////////////////////////////////////////////

public class LeggiDaInput {
	
    private  Info matrCalcolata;   
	private  GestioneInfoMatrici G;
	private int numM, numProd;
	private  String riga;
	private  Scanner in_Int=new Scanner(System.in);
	private  Scanner in_Str=new Scanner(System.in);
	private  StringTokenizer st;
	private  String bloccoP;   // serve per il blocco di parentesi
	private  String riga_2;
	
	private  Pattern patternR = Pattern.compile("([(]([A-Z0-9]+)+[)])");
	private  Pattern patternP = Pattern.compile("°{1}[0-9]+°{1}|[A-Z]{1}");
 //Pattern patternI= Pattern.compile("([A-Z] ){1}([0-9] )+([0-9])+");
	 
	public LeggiDaInput() {
	     numM=0; riga=""; st=null;  bloccoP=""; riga_2=""; //infoCalcolati=null;
	      G=null;  
	}
	
	public void AllocaHashMapEriempi()throws Exception{
		System.out.println("IMMETTI IL NUMERO DI MATRICI CHE VERRANNO TRATTATE IN INPUT");
		    numM=in_Int.nextInt();
		   ///////////// if(numM)
        GestioneInfoMatrici G=new GestioneInfoMatrici(numM); 
       
        while(numM>0){
			System.out.println("immetti riga nel formato  <Nome_matrice Riga Colonna>  : M R C");
   	             riga=in_Str.nextLine() ;
   	     //////////if
		 G.PosizionaInHashMap(riga);// ogni riga è identificata da una kiave
            numM--;   
       }    
   }   
	
	
	public void LeggiCalcolaEspr(){
		  int kB=0;
		do{
		   System.out.println("inserisci riga");
		   riga=in_Str.nextLine();	
		     //generare eccezione in caso di immissione di numeri !!!
		   Matcher matcher = patternR.matcher(riga); 
		    while(riga.contains("(")){
		    	    while(matcher.find()){
				  	                  bloccoP=matcher.group();
				  		                String chiave = ".".concat(String.valueOf(kB)).concat(".");
				  		             
				  		         if(VerificaEcalcoloBlocco(bloccoP,chiave))
				  		            return ;

				  		             kB++;
				  		          riga_2=riga.replace(bloccoP, chiave);
							  riga=riga_2;  
			  	    }	
			  	           matcher = patternR.matcher(riga);
	        } 
	   //qui viene memorizzato in qualche struttura dati il numProd 
       }while( ! riga.equals("STOP"));  	
    	
    	
    }//metodo
	
    public  boolean VerificaEcalcoloBlocco(String Par,String k){
		
		 Matcher matcher_2 = patternP.matcher(Par); 
		 boolean unaVolta=false;
	System.out.println("inizio calcolo bloccooooooooo-----------------------------------------------------");       
	        
	         while(matcher_2.find()){                                                        
	            String str= matcher_2.group();                                  
	                                                                              
	                 if(!unaVolta){
    	      Info I= G.getInfoSuM(str);  //<<<<<<<<<ERROREEEE-------------------------
			    	        /* 
			    	        matrCalcolata= new Info(I.getRiga(), I.getCol());
			    	          System.out.println("righe   "+matrCalcolata.getRiga()  );
			    	           System.out.println("colonne    "+matrCalcolata.getCol()  );*/
					    	return true;
		           }
/*
		            else{		    		
		                   if(str.charAt(0)=='°')
		                    	 k=str;
       		    	}
		            System.out.println("-->"+ str);
*/
		    }
      System.out.println("fine calcolo bloccooooooooo---------------------------------------------------------------");   
	    		return true;
	    		
  }//metodo
	

	public void StampaLetturaRighe(){
		System.out.println("immetti riga nel formato <Nome_matrice Riga Colonna>  : M R C");
	}

/////////////////////////////////////////////////////////////////////


public class AVVIO_mC {

	    public static void main(String[] args) {
	     		LeggiDaInput L=new LeggiDaInput();
	     		boolean cicla=false;
	  do{   		
	     		try{
	     			cicla=false;
	                L.AllocaHashMapEriempi();
	     		}catch (Exception e) {
	      System.out.println("*******************************ATTENZIONE! INSERIRE CORRETTAMENTE I CAMPI*********************************!!!");
			    	 cicla=true;
	     		} 
	  }while(cicla);  
	     		
	              L.LeggiCalcolaEspr();
	
	    
	    }//m
}
Salve,mi ritrovo con un errore nullPointerException,nella classe LeggiDaInput nel metodo LeggiCalcolaEspr(); precisamente nella riga commentata con ERRORE ...servirebbe un aiutino ...