Foros del Web » Programación para mayores de 30 ;) » Java »

Ayuda por favor: no puedo encontrar los .class

Estas en el tema de Ayuda por favor: no puedo encontrar los .class en el foro de Java en Foros del Web. Hola chicos. Tengo un problema, de principiante, que lo he tratado de resolver de mil maneras, pero ya me estoy volviendo loco, es desesperante!! T_T ...
  #1 (permalink)  
Antiguo 23/05/2004, 18:05
 
Fecha de Ingreso: noviembre-2003
Mensajes: 28
Antigüedad: 20 años, 5 meses
Puntos: 0
Ayuda por favor: no puedo encontrar los .class

Hola chicos.

Tengo un problema, de principiante, 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
{

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

public static int Reservar(int numero, String clien_id, String fecha)
{
return 0;
}

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

}

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: Habitacion\Habitacion.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.

PD: Sospecho que quizas mi JDK este mal configurado, porque en una ocasion hice algo al pie de la letra (literalmente) de lo que explicaba en una pagina de programacion, ya que en una ocasion ni siquiera le puse Package pero me mando error igual no mas, cuando en dicha pagina decia que era imposible que la compilacion fallara, sin embargo a mi si me fallo. Si es posible me podrian decir exactamente que variables de entorno deben definirse y que valores deben contener?

Bueno, espero que no sea demasiado pedir, pero encuentro que lamentablemente la documentacion de Java hay bastante pero a la vez no explica nada, son explicaciones demasiado genericas y complicadas.

Un saludo.
  #2 (permalink)  
Antiguo 24/05/2004, 01:02
 
Fecha de Ingreso: mayo-2004
Mensajes: 75
Antigüedad: 20 años
Puntos: 2
Por lo que veo en el codigo que has puesto los clases Habitacion y Recepcionistas tienen al principio la siguiente sentencia:

package Hotel;

Con esto le estas diciendo que las clases estan dentro de un directorio Hotel, por lo que para importarlas deberas poner:

import Hotel.*; //si quieres importar las dos clases
import Hotel.Habitacion; //si solo quieres importar la Habitacion

Y tu estructura de directorios seria:

/Hotel/ (aqui deberias tener los class de Habitacion y recepcionista, sin ninguna carpeta mas)

Si lo que deseas es dividir mas la aplicacion metiendo cada clase en un paquete distinto (es decir dentro de hotel quieres una carpeta habitacion y otra recepcionista) lo que tienes que poner en las classes es:

Clase Habitacion:

package hotel.habitacion;

//para importarla:
import hotel.habitacion.*;//o
import hotel.habitacion.Habitacion;

Clase Recepcionista:
package hotel.recepcionista;

//para importarla:
import hotel.recepcionista.*;//o
import hotel.recepcionista.Recepcionista;

Una cosa, los nombres de paquetes segun la nomenclatura de java deben empezar en minusculas, por lo que te aconsejo que cambies Hotel por hotel, y fijate que el directorio tambien este creado con minusculas, sino te puede dar problemas.
  #3 (permalink)  
Antiguo 24/05/2004, 22:45
 
Fecha de Ingreso: noviembre-2003
Mensajes: 28
Antigüedad: 20 años, 5 meses
Puntos: 0
Muchisimas gracias por tu ayuda Soniagrande!!

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.
  #4 (permalink)  
Antiguo 25/05/2004, 09:45
 
Fecha de Ingreso: mayo-2004
Mensajes: 75
Antigüedad: 20 años
Puntos: 2
Efectivamente dentro de un mismo fichero solamente puedes poner una unica clase publica.

Se podria definir mas de una clase dentro del fichero, pero solamente una puede ser publica, el resto o protected o privadas y solamente las puede usar las clases de donde esta creada.

En cuanto a si es mas comodo o no, supongo que es cuestion de gustos, yo soy adicta a la programacion orientada a objetos y me gusta eso de tener todas las clases perfectamente separadas, asi cuando tengo que tocar algo solamente lo toco en el fichero de la clase que sea sin preocuparme que las otras clases se me puedan "estropear" por algun error en el codigo.

Supongo que es cuestion de gustos, como separar las camisas de las camisetas o tenerlo todo junto en la misma balda ;)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:45.