¿Cómo correr programa desde la consola de comandos?

Iniciado por leogtz, 27 Agosto 2009, 17:41 PM

0 Miembros y 1 Visitante están viendo este tema.

leogtz

Hola a todos.
Estoy aprendiendo un poco de Java, quisiera saber como ejecutar un programa desde la consola de comandos.
¿Cual es la sintaxis o el programa que me permite eso?
Yo normalmente ejecuto los codigos desde el "runner" de Eclipse.
Estoy en Ubuntu 8.04 - Hardy Heron.

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Casidiablo

Hola Leo.

Lo primero que debes tener en cuenta es que debes tener instalado el JRE, que puedes buscar desde tus repositorios. Una vez lo tengas, puedes ejecutar tus programas de esta manera:

Para un archivo llamado Programa.class:

java Programa

Para un archivo JAR:

java -jar Programa.jar
Un saludo!

egyware

Hola Casidiablo... ;D
Tambien debes tener compilado tu jar para poder ejecutar programa, para eso en el eclipse hay un asistente que exporta los jar, es facil de usar.

leogtz

Es que ese es el probema, creo ya tener todo instalado:

leo@lein:~/workspace/java/holamundo$ sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias      
Leyendo la información de estado... Hecho
sun-java6-jre ya está en su versión más reciente.
sun-java6-plugin ya está en su versión más reciente.
sun-java6-fonts ya está en su versión más reciente.
Se instalaron de forma automática los siguientes paquetes y ya no son necesarios.
 lesstif2 libgeomview-1.9.4 winbind
Utilice «apt-get autoremove» para eliminarlos.
0 actualizados, 0 se instalarán, 0 para eliminar y 27 no actualizados.
leo@lein:~/workspace/java/holamundo$


Ahora, este es mi código, "holamundo.java":
leo@lein:~/workspace/java/holamundo$ ls
holamundo.class  holamundo.java
leo@lein:~/workspace/java/holamundo$ cat holamundo.java
package holamundo;
import java.util.*;
public class holamundo
{
       public static void main(String[] args)
       {
               System.out.println("Hello!\n");
       }
}
leo@lein:~/workspace/java/holamundo$

Al intentar correrlo:
leo@lein:~/workspace/java/holamundo$ java holamundo.java
Exception in thread "main" java.lang.NoClassDefFoundError: holamundo/java
Caused by: java.lang.ClassNotFoundException: holamundo.java
       at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
       at java.security.AccessController.doPrivileged(Native Method)
       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
       at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: holamundo.java.  Program will exit.
leo@lein:~/workspace/java/holamundo$

¿En que estoy mal?
Eclipse me corre bien el programa.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

egyware

Sii estas mal
compila primero
javac Hola.java
y luego
java Hola
Adios

leogtz

Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

1mpuls0

Hola

Citar
Tuve que instalarlo, no lo tenía.

A que te refieres??

En tu código mire que tienes un

package holamundo;


No sé si sabes lo que hace esta linea, pues lo unico que hace es guardar tu .class en una carpeta ( con el nombre holamundo) que se crea en ese mismo directorio. Esto lo hace ejecutandolo de un editor(Jcreator, netbeans, eclipse, etc). Si lo haces desde linea de comandos no te genera la carpeta sino que el .class lo crea en ese mismo directorio donde se encuentra tu .java

No estoy muy seguro, pero si ejecutas el programa desde consola tendria que aparecer un error.

Te recomiendo que para no estes abriendo tu consola cada vez que quieras ejecutar un programa, te crees un ejecutar.bat
El cual contendrá lo siguiente:


javac holamundo.java
@pause
java holamundo
@pause


Saludos
abc

leogtz

Cita de: Darhius en 28 Agosto 2009, 07:57 AM
Hola

Citar
Tuve que instalarlo, no lo tenía.

A que te refieres??

En tu código mire que tienes un

package holamundo;


No sé si sabes lo que hace esta linea, pues lo unico que hace es guardar tu .class en una carpeta ( con el nombre holamundo) que se crea en ese mismo directorio. Esto lo hace ejecutandolo de un editor(Jcreator, netbeans, eclipse, etc). Si lo haces desde linea de comandos no te genera la carpeta sino que el .class lo crea en ese mismo directorio donde se encuentra tu .java

No estoy muy seguro, pero si ejecutas el programa desde consola tendria que aparecer un error.

Te recomiendo que para no estes abriendo tu consola cada vez que quieras ejecutar un programa, te crees un ejecutar.bat
El cual contendrá lo siguiente:


javac holamundo.java
@pause
java holamundo
@pause


Saludos

Me refiero a que tuve que instalar gcj-4.1 para poder correr los programas.

Y sí, tengo el siguiente código en eclipse:
package holamundo;
public class holamundo
{
public static void main(String[] args)
{
System.out.println("Adios");
}
}

Si le quito el "package holamundo" no corre, pero desde la línea de comandos sí:
leo@lein:~/workspace/java/holamundo$ cat holamundo.java
public class holamundo
{
        public static void main(String[] args)
        {
                System.out.println("Adios");
        }
}leo@lein:~/workspace/java/holamundo$ javac holamundo.java
leo@lein:~/workspace/java/holamundo$ java holamundo
Adios
leo@lein:~/workspace/java/holamundo$

Y viceversa, si tengo el "package holamundo" y lo compilo desde la línea de comandos, no funciona:
leo@lein:~/workspace/java/holamundo$ cat holamundo.java
package holamundo;
public class holamundo
{
        public static void main(String[] args)
        {
                System.out.println("Adios");
        }
}leo@lein:~/workspace/java/holamundo$ javac holamundo.java
leo@lein:~/workspace/java/holamundo$ java holamundo
Exception in thread "main" java.lang.NoClassDefFoundError: holamundo (wrong name: holamundo/holamundo)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: holamundo.  Program will exit.
leo@lein:~/workspace/java/holamundo$


¿Como hacer para que funcione en las dos?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

egyware

cuando usas package es porque lo estas metiendo dentro de una capeta (o similar) tu clase, eso significa que debes estar en un nivel superior.
Esto nunca lo he hecho porque para clases chicas como la que mensionaste omito el package y me queda guardado en el paquete por defecto, pero por teoria deberia funcionar:
#java holamundo/holamundo
La clase holamundo debe estar guardada en la carpeta holamundo
Espero que me hayas entendido
Adios