Por favor ayuda: Encontrar los .class al compilar

danielGT
25 de Mayo del 2004
Hola chicos.

Tengo un problema que lo he tratado de resolver de mil maneras, pero ya me estoy volviendo loco, es desesperante!! T_T

Veran, estoy haciendo un programa solo de pruebas, que pretende terminar siendo un sistema de reservas de un hotel. Estoy tratando de crear un package con 2 clases, una llamada Habitacion y otra llamada Recepcionistas, de la siguiente manera:

package Hotel;

class Habitacion
{
private static int numero;
public static boolean suite;
public static boolean privado;
public static boolean frigobar;
public static boolean basica;
public static boolean reservada;
public static boolean ocupada;

public static int Consul_Estado(int numero)
{
return 0;
}

public static void Reservar(int numero, String clien_id, String fecha)
{
reservada = true;
ocupada = false;
}

public static void Reservar(int numero)
{
reservada = false;
ocupada = false;
}
}

class Recepcionistas
{
public static void metodo1()
{
}

public static void metodo2()
{
}

}

el cual al compilar me genera 2 archivos .class uno llamado Habitacion.class y otro Recepcionistas.class. Ahora bien, quiero otro archivo, que me permita utilizar el package, por ejemplo, como el siguiente

import java.io.*;
import Habitacion.*;

class Hotel_Pruebas
{
public static void main(String[] args)
{
Habitacion h = new Habitacion();
System.out.println("Programa terminado");
}
}


Ahora bien, tengo entendido que al estar contenido en packages, me obliga a que los .class que cree anteriormente esten en directorios con el mismo nombre que la clase, es decir, Habitacion.class y Recepcionistas.class deben estar en directorios Habitacion y Recepcionistas.

Mi estructura de directorios es la siguiente

Hotel: Aqui esta Hotel_Prueba.java
Dentro de Hotel estan
Recepcionistas: donde esta Recepcionistas.class
Habitacion: donde esta Habitacion.class

Sin embargo al compilar, me da el siguiente error:

Hotel_Prueba.java:2: package Habitacion does not exist
import Habitacion.*;
^
Hotel_Prueba.java:8: cannot access Habitacion
bad class file: HabitacionHabitacion.class
class file contains wrong class: Hotel.Habitacion
Please remove or make sure it appears in the correct subdirectory of the classpath.

Habitacion h = new Habitacion();

Estoy compilando con el siguiente comando:

javac -classpath Habitacion Hotel_Prueba.java

Pero ya de tanto compilar, probar, volver a probar, etc... ya me ha quedado un enredo incomprensible.

Por favor, alguien me puede ayudar diciendome como debiera ser mi estructura de directorios, que opciones de linea de comando utilizar para que me compile bien y si mis codigos fuentes estan o no bien escritos/estructurados?

Un saludo ^^ y gracias de antemano.

cherlux
25 de Mayo del 2004
Estimado Daniel:

No se me ocurre otra cosa mas que QUITA EL IMPORT!!!! y compila igual, llamas a los metodos o variables:

paquete.clase instancia

paquete.clase.algunMetodo();

Y con eso no creo que haya problema.

En mi caso particular uso NetBeans o JCreator, estos te crean los paquetes automaticamente, y eso de que un directorio por clase??? jamas lo he visto, por lo regular al crear las clases y poner el package java genera UNA SOLA carpeta efectivamente, con el nombre del paquete, y un subdirectorio classes donde pone todas las classes derivadas, tu no te preocupas por nada, de hecho, cuando compilas y corres en el mismo directorio ni siquiera tienes que especificar classpath!!!!, asi de maravilloso es este lenguaje creado por los dioses.

Si sigue mal despues de este super rollote, espero poder contestarte mas especificamente :D

Recive un abrazo con todo fervor revolucionario.

Atte CherLUX
"Hasta la victoria SIEMPRE
PATRIA O MUERTE
VENCEREMOS!!!"

danielGT
25 de Mayo del 2004
Intentare hacerlo asi para tenerla mas facil mas adelante, a ver si asi no me ocurre tan seguido esto, muchas gracias

chuidiang
25 de Mayo del 2004
Tu paquete es Hotel (package Hotel).
Debes meter los .class de este paquete en un directorio que se llame igual que el paquete, es decir

PATH_DE_MI_PROYECTOHotelHabitacion.class
PATH_DE_MI_PROYECTOHotelRecepcionistas.class

Cuando quieras usar esto, debes poner

import Hotel.Habitacion;
import Hotel.Recepcionistas;

En el classpath debes poner el directorio padre del directorio Hotel. Es decir

-classpath PATH_DE_MI_PROYECTO

Puedes ampliar un poco todo esto en

http://www.geocities.com/chuidiang/java/classpath/classpath.html

Se bueno.

danielGT
25 de Mayo del 2004
Muchisimas gracias!!

ahi si que me resulto, pero solo tengo una duda: despues de la compilacion, surgio otro problema (pero que ya arregle), que no podia acceder a las clases Habitacion y Recepcionista ya que no eran clases publicas, sin embargo no se puede tener mas de 1 clase publica, de hecho el compilador me reclamaba, sin embargo eso lo arregle colocando cada clase en archivos diferentes pero a ambos archivos que pertenecieran al mismo package, lo cual viene siendo lo mismo que me explicaste.

Como se puede tener varias clases dentro de 1 solo archivo, ya que no puedo tener mas de 1 clase publica, es algo solo por comodidad para no tener que crear tantos archivos como clases vaya necesitando (en mi opinion es mas comodo trabajar con 1 solo archivo). O simplemente no se puede?

Un saludo.

chuidiang
25 de Mayo del 2004
No se puede.
Ademas la clase publica debe llamarse igual que el fichero.
Se bueno.