java - returned - No se pudo encontrar la clase principal HelloWorld
no se ha encontrado o cargado la clase principal intellij (10)
¡No estás configurando un classpath que incluye tu clase compilada! java
no puede encontrar ninguna clase si no le dices dónde buscarla.
java -cp [compiler outpur dir] HelloWorld
Por cierto, no es necesario que establezca CLASSPATH como lo hizo.
Instalé Java 1.7.0 en la siguiente carpeta C:/Program Files/Java
. Mi sistema operativo es Windows XP (Versión 2002) con Service Pack 3.
Las variables de entorno que establezco son:
CLASSPATH :
C:/Program Files/Java/jdk1.7.0/jre/lib/rt.jar;
Ruta:
C:/Program Files/Java/jdk1.7.0/bin;
JAVA_HOME :
C:/Program Files/Java;
He presentado aquí los nombres de las clases que están en mi sistema.
Luego escribí un programa, HelloWorld.java:
import java.io.*;
class HelloWorld
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
Cuando estoy compilando usando javac HelloWorld.java
, está compilando bien.
Pero después de emitir java HelloWorld
me encuentro con el siguiente error:
Error: Could not find main class HelloWorld
Exception in thread "main" java.lang.NoClassDefFoundError: HelloWorld
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:198)
Caused by: java.lang.ClassNotFoundException: HelloWorld
at java.net.URLClassLoader$1.run(URLClassLoader.java:299)
at java.net.URLClassLoader$1.run(URLClassLoader.java:288)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:287)
at java.lang.ClassLoader.loadClass(ClassLoader.java:422)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325)
at java.lang.ClassLoader.loadClass(ClassLoader.java:355)
at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:195)
Después de buscar un poco, descubrí que puede haber algún problema en la variable de entorno. Traté de jugar con eso, pero no tuve suerte.
Incluso reinicié la máquina y luego traté de correr pero con la misma suerte.
Dígale dónde buscar su clase: está en ".", Que es el directorio actual:
java -classpath . HelloWorld
No es necesario establecer JAVA_HOME
o CLASSPATH
en este caso
Java no encuentra dónde se encuentra el archivo de clase compilado (HelloWorld.class). Utiliza los directorios y archivos JAR en la variable de entorno CLASSPATH
para buscar si no se -cp
-classpath
opción -cp
o -classpath
al ejecutar java.exe.
No necesita rt.jar en CLASSPATH
, solo era necesario para las versiones anteriores de Java. Puede dejarlo indefinido y se usará el directorio de trabajo actual, o simplemente lo agregará .
(un solo punto), separado por '';'', a la variable CLASSPATH
para indicar el directorio actual:
CLASSPATH: .;C:/.../some.jar
Alternativamente, puede usar la opción -cp
o -classpath
:
java -cp . HelloWorld
Y, como escribió Andreas, JAVA_HOME
no es necesario para Java, solo para algunas herramientas de terceros como hormiga (pero debe apuntar a la ubicación correcta).
O bien desea agregar "." a su CLASSPATH para especificar el directorio actual, o agregarlo manualmente en el tiempo de ejecución de la manera sugerida por Unbeli.
Parece que había hecho toda la configuración correctamente, pero podría haber un área donde podría estar causando problemas
Comprueba el valor de tu variable "CLASSPATH" y asegúrate de que al final guardaste ;
Nota :; es para el separador de final . es para incluir la ruta existente al final
Simplemente elimine su "classpath" de su variable de entorno. Luego intente ejecutar:
java HelloWorld
Esto debería funcionar bien.
También me he enfrentado al mismo problema ...
En realidad, este problema se plantea debido a que los archivos .class
su programa no se guardan en ese directorio. Elimine su CLASSPATH de su variable de entorno (no es necesario establecer classpath para programas Java simples) y vuelva a abrir el indicador de cmd, luego compile y ejecute.
Si observa cuidadosamente su archivo .class
se guardará en la misma ubicación. (No soy un experto, también soy un programador básico si hay algún error en mis oraciones, por favor ignórelo :-))
Yo tuve el mismo problema. Quizás, el problema es que compiló y ejecutó la clase con diferentes versiones de Java.
Asegúrese de que la versión del compilador sea la misma que el comando "java" :
javac -version
java -version
En Linux, use
sudo update-alternatives --config java
para cambiar la versión de Java.
poner .; en classpath value in beginning ... comenzará a funcionar ... sucede porque busca el archivo de clase en classpath que se menciona en la variable de ruta.
JAVA_HOME
no es necesario si inicia java y javac desde la línea de comando. Pero JAVA_HOME
debería apuntar al directorio jdk real, C:/Program Files/Java/jdk1.7.0
en su caso.
Nunca usaría la variable de entorno CLASSPATH
fuera de los scripts de compilación, especialmente no definidos globalmente. La bandera -cp
es mejor. Pero en su caso, ya que no necesita bibliotecas adicionales ( rt.jar
no cuenta), no necesitará una declaración de ruta de clase. Un -cp
faltante es equivalente a un -cp .
y eso es lo que necesitas aquí)
La clase HelloWorld
debe declararse como public
.Esto en realidad puede ser la causa de tus problemas. (Estaba bastante seguro de que un archivo fuente necesita una clase pública ... ¿o era una clase pública como máximo ?)