StackOverflowError....=(

bom, o meu codigo ta dando esse erro ai, compila direito mas na hora de rodar da isso… como q eu concerto isso?? esse codigo eh de ordenação topologica.

import java.io.*;
import javax.swing.*;
 
class OrdemTop {

	public void ler()  throws IOException {
     	
     	int aux=0, tempo=0, controle=0;;
        InputStream is = getClass().getResourceAsStream ("teste\teste.txt");
        BufferedReader br = new BufferedReader (new InputStreamReader (is));
        String linha="";;
	    
        linha = br.readLine();
       	aux=Integer.parseInt(linha);
    	char matriz[][] = new char[aux][aux];
    	int fecha[] = new int[aux];
    	int anterior[] = new int[aux];
	   	boolean visitado[] = new boolean[aux];
    	    	
    	for(int i=0; i<aux; i++){//descobre a matriz
    		linha += br.readLine();
    	}
    	
    	for(int i=0; i<aux; i++){//inicializa a matriz
    		for(int j=0; j<aux; j++){
    			matriz[i][j] = linha.charAt(i+j);
    		}
    	}
    	
    	for(int i=0; i<aux; i++){//inicializa anterior com zero e visitado(marca todos os vertices) como naum visitado
    		anterior[i]=0;
    		visitado[i]=false;
    	}
    	
    	visita(matriz, visitado, fecha, controle, aux, tempo, anterior);
    	ordenaTop(fecha, aux);
    	
    	br.close(); // br.close já fecha "is" automaticamente
    
	}
    
    public void ordenaTop(int fecha[], int aux){
    	String ordena=Float.toString(fecha[0]);
    	int menor=fecha[0];
    	
    	for(int i=1; i<aux; i++){
    		if(fecha[i]<menor){
    			menor = fecha[i];
    			ordena = Float.toString(fecha[i]) + ordena;
    		}else{
    			ordena += Float.toString(fecha[i]);
    		}
    	}
    	System.out.println(ordena);
    	
    }
        
	public void visita(char matriz[][], boolean visitado[], int fecha[], int controle, int aux, int tempo, int anterior[]){
		
		tempo++;//adiciona mais um ao tempo...
		for(int j=0; j<aux; j++){
    		
   			visitado[controle] = true;//marca o vetor como visitado...
    		    			
	   		if( (matriz[controle][j]=='1') && (visitado[controle]==false) ){
   				anterior[j]=controle;//pra gravar qual é o vertice do anterior do proximo
   				controle = j;//acha o proximo vertice
   				visita( matriz, visitado, fecha, controle, aux, tempo, anterior );
	   		}
    		
   			if( j==(aux-1) ) {
   				fecha[controle]=tempo;//acha o tempo em que se volta a partir do vertice
   				visita( matriz, visitado, fecha, anterior[controle], aux, tempo, anterior );
	   		}
   		}
   		
   		for(int i=0; i<aux; i++){//verifica se tem algum vertice não visitado...
   			if(visitado[i]==false){
   				visita( matriz, visitado, fecha, i, aux, tempo, anterior );
   			}
   		}
    	    	
	}
     
    public static void main(String[] args) throws IOException {
       OrdemTop tf = new OrdemTop();
       tf.ler();
       System.exit(0);
    }
}

Cara,

o erro que você está tendo é um estouro de pilha, ou seja, você está tendo algum problema em um método recursivo (no caso, parece ser o método visita) que faz com que ele continue entrando indefinidamente até que estoure o número máximo de chamadas recursivas permitida pelo tamanho da pilha da jvm.

Reveja sua recursividade!

Abraço,

Armando.

acho que o seu problema não necessita de uma matriz bidimencional. se conseguir converter para uma matriz unidimensional, use o atributo nomeDaMatriz.length para limitar o seu laço for.