2012-08-12 18 views
6

He importado el archivo algs4.jar como una biblioteca referenciada como se ve arriba. Todo parece estar bien, pero parece que no puedo usar ni acceder a ninguna de las clases de la biblioteca.Cómo utilizar las clases en bibliotecas referenciadas en Eclipse

¿Hay una declaración de importación que me falta?

Referencia de imagen:

Nota cómo estoy tratando de usar BinarySearch de la biblioteca de referencia, pero no me está ofreciendo una opción para utilizar o importarlo.

+1

Puede hacer 'ctrl + shift + o' y eclipse agregará las importaciones necesarias. A partir de su error, parece que le falta el contenedor que contiene la clase 'BinarySearch' en la ruta de compilación. – CoolBeans

+3

Tengo el mismo problema ... con el mismo algs4.jar :)) –

Respuesta

6

No estoy seguro, no probé esto. Algunas interpretaciones sin embargo.

¿Es esta una biblioteca estándar o alguien lo creó solo y te dio?

El problema es que la clase BinarySearch está en el paquete default. No podrás importarlo. Si usted o un amigo suyo crean esta biblioteca, debe pedirle a su amigo que mueva todas las clases del paquete predeterminado a un buen espacio de nombres y luego vuelva a crear el contenedor.

Si la clase es accesible, ctr + shift + o debe importar la clase.

+0

Eso es lo que comencé a pensar. Así que descomprimí el frasco y lo agregué a un paquete. Ahora puedo usar una declaración de importación ("com.package. *") E incluso puedo crear una nueva referencia a la clase ("BinarySearch bs = new BinarySearch()". Sin embargo, en el tiempo de ejecución obtengo una ClassNotFoundException. – jeffstern

+0

Además, También recibo este mensaje de error: 'Exception in thread" main "java.lang.NoClassDefFoundError' – jeffstern

+0

@jeffstern - No puedes simplemente descomprimir y mover archivos' .class'. Necesitas la fuente. Para cada archivo '.java', cambia el declaración de paquete a algo adecuado y luego exportar como jar. Los archivos '.class' existentes todavía tienen una declaración de paquete anterior, es decir' default'. Moverlos al paquete deseado no cambiará la declaración del paquete y por lo tanto su importación no funcionará. – devang

1

Tenga en cuenta que las clases en los archivos jar están todas incluidas en el paquete predeterminado.

Si sus clases están contenidas en un paquete, entonces no serán accesibles directamente.

Envíe esta respuesta porque estoy tomando el curso de algoritmos al que pertenecen estos archivos jar y esta fue la causa específica de que mi programa no funcionara.

+0

Esta es la respuesta correcta. Las clases en el paquete 'default' no son accesible por clases en otros paquetes. Esto no tiene nada que ver con estar en una biblioteca de referencias. – Sentry

5

Estoy tomando una clase Algorithms a través de Coursera que utiliza la biblioteca de referencia algs4.jar.

El problema:

El problema que tiene es que la biblioteca de referencia se encuentra en el paquete por defecto y la fuente en la que se está accediendo a la biblioteca de referencia no lo es.

La solución

Todas las clases en su proyecto necesita estar en el paquete por defecto, de lo contrario no serán reconocidas las bibliotecas de referencia (que se encuentran en el paquete por defecto). Sus clases de proyecto deben estar en el directorio src y no debe declarar un paquete al principio de sus archivos .java. Además, también debe asegurarse de tener added the reference libraries to your build path.

0

Si desea importar las clases, debe descargar la versión empaquetada de la biblioteca. Consulte la sección Q & A en la parte inferior de esta página web. http://introcs.cs.princeton.edu/java/stdlib/

P. Si utilizo un paquete llamado a estructurar mi código, el compilador ya no puede acceder a las bibliotecas en stdlib.jar. Por qué no?

A. Las bibliotecas en stdlib.jar están en el paquete "predeterminado".En Java, no puede acceder a clases en el paquete predeterminado desde un paquete nombrado. Si necesita usar nuestras bibliotecas con un paquete con nombre, puede usar la versión en paquete stdlib-package.jar.

0

En primer lugar, no se puede crear BinarySearch (Constructor privado). Utilice el método estático BinarySearch.rank(int key, int[] array)

En segundo lugar se puede acceder sólo desde BinarySearch paquete por defecto

En tercer lugar ¿qué pasa con Arrays.binarySearch(array, key)?

Cuestiones relacionadas