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

No me ejecuta el java

Estas en el tema de No me ejecuta el java en el foro de Java en Foros del Web. Hola!!!! Resulta que quiero trabajar en java en la consola del windows, así que me bajé el jdk1.5.0_09 de la página de sun, me lo ...
  #1 (permalink)  
Antiguo 05/10/2006, 16:29
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
Mensaje No me ejecuta el java

Hola!!!!
Resulta que quiero trabajar en java en la consola del windows, así que me bajé el jdk1.5.0_09 de la página de sun, me lo instalé y luego cambié el path, poniendole la ruta de la carpeta bin de java (donde están java.exe y javac.exe) para que me lo pille la consola. Hasta aquí todo bien, pruebo de escribir "java" y "javac" en la consola a ver si funcionan y todo bien. Entonces pruebo con un programita que tengo, lo compilo bien (javac ARCHIVO.java), me genera el .class y todo perfecto, pero luego cuando intento ejecutar con "java ARCHIVO" me sale "Exception in thread "main" java.lang.NoClassDefFoundError: ARCHIVO". No es ningún problema de la clase porque la compilo y ejecuto en otros ordenadores y funciona perfectamente, no tiene errores, sólo me falla en mi ordenador. Tampoco se ejecutan otros programas java que tengo, me sale el mismo error en todos; compilan pero no se ejecutan. Probé de desinstalar y volver a instalar el java pero pasa lo mismo. Si alguien pudiera ayudarme lo agradecería mucho.

Por otra parte, también agradecería ayuda para hacer lo mismo en un Mandriva 2006. Le puse el java (j2re1.4.2...) y todo perfecto. Luego compruebo que existe la carpeta /usr/bin/Java/j2re..../bin, con sus correspondiente java y javac. Sin embargo, cuando voy al shell (bash) y trato de compilar, me pone "javac no es un comando reconocido por el bash" o algo así. Concretamente quiero saber como cambiar el path en linux para poder compilar y ejecutar con java. Mire la ayuda y sale algo de "java -classpath" o "java -cp" para cambiar el path, pero no sé usarlos.
Agradezco cualquier colaboración. Muchas gracias y un saludo!!!!
  #2 (permalink)  
Antiguo 05/10/2006, 16:55
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Cita:
No me ejecuta el java
Cambiate a .net
  #3 (permalink)  
Antiguo 06/10/2006, 13:45
 
Fecha de Ingreso: marzo-2006
Mensajes: 54
Antigüedad: 18 años, 1 mes
Puntos: 0
para ejecutar un programa en java necesitas especificar la ruta completa de la clase (con paquetes y todo) que quieres ejecutar
por ejemplo si tienes el codigo:

//--------- Example.java ------------//
package src;

public class Example {
public static void main(String[] args) {
System.out.print("hola\n");
}
}

despues q lo compiles puedes ejecutarlo con:

java src.Example

verifica si la clase ARCHIVO pertenece a algun paquete

En Linux tambien existe una variable PATH, abre una consola y escribe:
echo $PATH
y veras su contenido, si quieres que tu terminal reconozca los programas java , javac , etc. debes agregarle a esta variable la ruta "/usr/bin/Java/j2reXXX/bin", para esto puedes ejecutar la sentencia:

export PATH="/usr/bin/Java/j2reXXX/bin":$PATH

esto solo te servira para la session que tengas abierta, si quieres q sirva para todas las sessiones de un usuario busca en el directorio home de dicho usuario (/home/nombreusuario) un fichero llamado .bashrc o quizas .bash_local y agregale al final la q te di mas arriba

saludos;
  #4 (permalink)  
Antiguo 06/10/2006, 17:15
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
NO no, no hay ningún paquete, sólo importo import java.io.*;
import java.net.*; Te pongo el código de uno de los archivos a ver que me dices ;) :
***********************tcpcliente.java************ **********
import java.io.*;
import java.net.*;
class tcpcliente {
public static void main(String args[]) throws Exception
{
String frase;
String fraseModificada;
BufferedReader entradaDesdeUsuario =
new BufferedReader (new InputStreamReader (System.in));
Socket socketCliente = new Socket ("nombrehost",6789);
DataOutputStream salidaAServidor =
new DataOutputStream (socketCliente.getOutputStream());
BufferedReader entradaDesdeServidor =
new BufferedReader (new InputStreamReader (socketCliente.getInputStream()));
frase = entradaDesdeUsuario.readLine ();
salidaAServidor.writeBytes(frase + '\n');
fraseModificada = entradaDesdeServidor.readLine ();
System.out.println("DEL SERVIDOR: " + fraseModificada);
socketCliente.close();
}
}
************************************************** ********
También intenté compilar en la carpeta bin directamente, poniendo los archivos java ahí, pero nada, sale el mismo error "Exception in thread "main" java.lang.NoClassDefFoundError: ARCHIVO".

En cuanto a lo del Linux, ya está solucionado; al volver a arrancar ya estaba todo instalado y compila y ejecuta perfectamente.

Espero tu respuesta, muchisimas gracias!!!!
  #5 (permalink)  
Antiguo 09/10/2006, 12:19
 
Fecha de Ingreso: marzo-2006
Mensajes: 54
Antigüedad: 18 años, 1 mes
Puntos: 0
la declaracion de tu clase es:
class tcpcliente {
...

deberia ser:
public class tcpcliente {
...
  #6 (permalink)  
Antiguo 09/10/2006, 14:34
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
Hola!!
La declaración no es el problema porque la clase en sí es sólo un main, no es una clase que se utilice en otras clases; simplemente es un main que ejecuta las instrucciones que hay, por eso no es necesario el public. Por otra parte el problema está en mi ordenador, no en las clases, porque no me ejecuta ningún archivo de java y en otros ordenadores funciona perfectamente, tanto el compilado, como la ejecución; a mi sólo me compila, no se me ejecuta.
A ver si me puedes ayudar....jeje....
Gacias por tu interés!!!! ;)
  #7 (permalink)  
Antiguo 10/10/2006, 05:45
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Si una clase no es "public", no puede ser ejecutada con un "java NombreDeClase", y si es public, el nombre del archivo (con .java) ha de coincidir con el nombre de la clase que hay dentro.

Lo que tambien puede pasar es que no tengas bien configurado el PATH y el CLASSPATH. Siendo un error "NoClassDefFoundError", lo más seguro es que sea el CLASSPATH.
  #8 (permalink)  
Antiguo 10/10/2006, 07:36
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
De acuerdo Re:

Hola!!!
Lo del "public" tienes razón, hay que ponerlo. Tenía la idea de que lo había hecho alguna vez sin él, pero bueno, tienes razón. Sin embargo, el problema no está en el public porque no me ejecuta ningún archivo, ni siquiera teniendo el "public". El path lo he revisado bien y está bien la ruta de la carpeta "bin" de java, y al escribir "java" y "javac" en la consola no me da error, así que supongo que estará bien el path. Es por esto que el problema puede estar en el classpath. ¿Tengo que poner la misma ruta que en el path? ¿Lo modifico en Mi PC->opciones avanzadas->variables de entorno, igual que el path? ¿Qué tengo que hacer concretamente? jejej
Espero tu ayuda, dependo de ti.
Muchas gracias y saludos!!!!! ;)
  #9 (permalink)  
Antiguo 10/10/2006, 11:19
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
El tema del classpath es bastante importante y te conviene tenerlo claro para poder trabajar con Java en cualquier entorno.
Así en breve, la Maquina Virtual Java (en windows ejecutada con java.exe, vamos) necesita saber de donde sacar las clases para ejecutarlas.No solo tu clase principal sino tambien todas las que hagas uso a través del import.

Para decirle de donde puede sacar las clases, se utiliza el concepto de CLASSPATH que es una serie de caminos a directorios y a ficheros .jar donde se encuentran las clases que necesitas. El CLASSPATH se compone de algunos elementos IMPLICITOS y otros EXPLICITOS, que has de especificar tú. Las clases del JDK, por ejemplo, estan en el CLASSPATH de modo implicito, no las has de poner, pero las tuyas no.

Existen diferentes formas de ejecutar aplicaciones Java (aplicaciones normales, servlets...) y cada una tiene sus "reglas" de lo que es implicito y explicito, pero tu caso, el de las aplicaciones normales es el más sencillo.

Entonces, el error que te da es por que cuando ejecutas tu clase ARCHIVO el no sabe donde encontrarla, puesto que no esta en el CLASSPATH, aunque este en el mismo directorio donde ejecutas Java, da igual.

Una forma rápida de ponerla en el CLASSAPATH es poner la variable de entorno CLASSPATH a ".", es decir, al directorio actual. Así cuando ejecutes java ARCHIVO el búscara en el directorio donde estes y si encuentra ARCHIVO.class, lo podrá ejecutar.

De forma resumida para una prueba rápida:
export CLASSPATH=.
vas al directorio donde está ARCHIVO.class y ejecutas "java ARCHIVO".

Un detalle sobre los paquetes, en el CLASSPATH hay que poner la ruta de ficheros .jar o diretorios base donde estan los .class. Es decir, si el fichero esta en el paquete "test", el fichero ARCHIVO.class debe estar en un dubdirectorio llamado "test" y el CLASSPATH debe apuntar al directorio donde esta "test", no al propio directorio donde esta el archivo .class.

Por ultimo, la convencion es que los nombres de los paquetes son en minusculas y los de las clases solo mayusculas las iniciales de las palabras, así que la clase debería ser Archivo. Las MAYUSCULAS solo se usan para las "constantes" (public static final xxx).

Si quieres hacer algo en Java, este es un tema que debes comprender en vez de limitarte a copiar lo que has visto en un foro por que es la base de muchas cosas y si no, te dará muchos problemas a la larga, muchos. .

Un saludo,
  #10 (permalink)  
Antiguo 10/10/2006, 16:13
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
De acuerdo Re

Hola!!!
He hecho lo de poner la variable de entorno CLASSPATH a " . " y ahora se ejecutan perfectamente los archivos. Me parece que ya está arreglado. En cuanto a lo de las convenciones con los nombres de archivos tienes razón, de hecho las clases con las que estoy trabajando se llaman "Recepcion" y "Envio", con la primera letra en mayúsculas, tal cómo dices tú. El nombre "ARCHIVO" es ficticio ya que nunca he trabajado con él, sólo lo puse en el foro para que fuera un poquito más clara la explicación.... jeje...De todas formas gracias, seguro que esto le sirve a alguien para aprender algo nuevo, incluyéndome a mí.
En definitiva, te agradezco mucho tu ayuda e interés, muchísimas gracias!!!!!
Un saludo!!!!!
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

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 01:36.