martes, 15 de marzo de 2011

"cannot find symbol", error al compilar

Cuando empezamos a aprender Java un error muy común al compilar desde DOS es que nos encontramos con errores en la compilación y no sepamos como resolverlo. Por ejemplo un de ellos se produce cuando en una clase creamos un objecto a partir de otra clase.

Por ejemplo teniendo estas dos clases, una es Leer.java y la otra Leer3.java que crea el objeto de la case Leer.java:

//Clase Leer.java
import java.io.*;

import java.util.Scanner;

public class Leer{

public String Leer()
{

return porTeclado();

}


public String porTeclado()


{


Scanner leer = new Scanner(System.in);


String cadena = leer.next();


return cadena;


}


}



//Clase Leer3.java

public class Leer3


{


public static void main(String args[])


{


Leer vleer = new Leer();


String cadena = vleer.porTeclado();


System.out.println("Texto leido : " + cadena);


}


}



Partimos de que los dos archivos están guardados en el siguiente directorio:

C:\cursojava\modulor4\practica4\Leer.java

C:\cursojava\modulor4\practica4\Leer3.java



Al compilar las clases según se muestra a continuación, vemos que nos genera un error de "cannot find symbol", en la compilación de la clase Leer3.java, cuando la compilación de la clase Leer.java no ha generado ningún problema.

C:\cursojava>javac modulo4/practica4/Leer.java

C:\cursojava>javac modulo4/practica4/Leer3.java

modulo4\practica4\Leer3.java:6: cannot find symbol


symbol : class Leer


location: class Leer3


Leer vleer = new Leer();


^


modulo4\practica4\Leer3.java:6: cannot find symbol


symbol : class Leer


location: class Leer3


Leer vleer = new Leer();

^

2 errors



El problema es debido a que la clase Leer3 necesita crear el el objecto de la clase Leer pero el compilador desconoce donde se encuentra almacenada dicha clase. Para ello debemos agrupar estas dos clases en un paquete PACKAGE, esta clave la deberemos indicar al principio de cada una de las clases para evitar el error. Hay que tener en cuenta la clave del paquete debe mantener la misma estructura de directorios donde están almacenadas las clases.

Según hemos visto en el ejemplo las clases deberían quedar de la siguiente manera:

//Clase Leer.java

package modulo4.practica4;

import java.io.*;

import java.util.Scanner;


public class Leer{


public String Leer()

{

return porTeclado();

}

public String porTeclado()

{

Scanner leer = new Scanner(System.in);

String cadena = leer.next();

return cadena;

}

}



//Clase Leer3.java

package modulo4.practica4;

public class Leer3


{


public static void main(String args[])


{


Leer vleer = new Leer();


String cadena = vleer.porTeclado();


System.out.println("Texto leido : " + cadena);


}


}


NOTA: También afecta la configuración de la variable de entorno CLASSPATH que para este ejemplo su valor es: c:\Java\jdk1.6.0_23\lib;c:\cursojava

7 comentarios:

  1. No puedo puedes ayudarme o que estaré haciendo mal.

    ResponderEliminar
  2. Era lo que necesitaba leer. estaba tratando de construir un proyecto grande y tenia problemas con un modulo importado desde un repositorio, y ese era el problema! no creaba los paquetes!
    Que bueno que me encontré con tu post.
    "El problema es debido a que la clase Leer3 necesita crear el el objecto de la clase Leer pero el compilador desconoce donde se encuentra almacenada dicha clase. Para ello debemos agrupar estas dos clases en un paquete PACKAGE, esta clave la deberemos indicar al principio de cada una de las clases para evitar el error."

    ResponderEliminar
  3. Respuestas
    1. Ya pude solucionar el error:
      En realidad no solucioné nada, solo compile desde src.
      Yo programo en Eclipse y pues, estaba compilando mis clases desde la misma carpeta del paquete, es decir:

      D:\Fernando J.r\Proyectos Java\Proyectos Eclipse\EclipseProjects\Calculadora(Hec
      ha en Eclipse)\src\clases>

      El paquete se llama clases.
      Cuando compilaba una desde esa direccion me botaba el cannot find symbol.

      lo que hice fue compilar desde el src así:

      D:\Fernando J.r\Proyectos Java\Proyectos Eclipse\EclipseProjects\Calculadora(Hec
      ha en Eclipse)\src>javac clases\Main.java

      de esta forma lo hizo correctamente...

      Eliminar
    2. hermano, simplemente eres un genio.

      Eliminar
    3. No entiendo que es src. Disculpa soy principiante y tengo el mismo error.

      Por otro lado,Uso Dr.Java y mi java esta en el archivos C y mis documentos .java guardados en desktop.

      File: C:\Users\A\Desktop\Servicio\discos\Usuario.java [line: 6]
      Error: cannot find symbol
      symbol: class Disco
      location: class discos.Usuario

      Eliminar
  4. gracias Fernando muy bien yo resolvi el mismo error solo cambiando la ccarpeta donde tenia mis archivos al excritorio y ahi corrio sin problema

    ResponderEliminar