O comando java não está mais rodando arquivos .class
A pouco tempo estava ok.
O comando javac continua compilando normalmente.
O Java está rodando em Win XP.
Ao notar este problema verifiquei a variável PATH e a mesma estava ok pois os comandos do Java são encontrados a partir de qualquer diretório.
O Java está instalado no seguinte endereço:
C:\Arquivos de programas\Java\jdk1.6.0_11
Na variável de sistema Path, o java está endereçado assim:
C:\Arquivos de programas\Java\jdk1.6.0_11\bin;
Desinstalei o Java SDK completamente e instalei novamente.
Fiz a intalação padrão.
Configurei a variável PATH com o local padrão do Java.
Mesmo após a nova instalação ao rodar qualquer arquivo .class (por exemplo, Welcome1.class) a resposta continua sendo a mesma:
Exception in thread “main” java.lang.NoClassDefFoundError: Welcome1/class
Caused by: java.lang.ClassNotFoundException: Welcome1.class
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: Welcome1.class. Program will exit.
Obs.: Duas maquinas que estavam rodando Java normalmente apresentaram esse mesmo problema.
Cara, eu nunca ouvi que o comando java rodasse colocando a extenção, será que vc não se confundiu com outra coisa?! tem certeza que vc realmente conseguiu executar um programa usando:
java Programa.class?!
De qualquer forma, se eu fosse vc não perderia muito tempo com isso não ehehe o que você precisa saber é que para rodar um programa java vc usa:
Pessoal este é um problema interessante… Muita gente acaba ficando viciado em apenas rodar o arquivo sem o .class, mas não sabe o porque.
Em Java existem os pacotes, que são usados para diminuir as chances de termos classes com nomes iguais. Quando uma classe está dentro de um pacote X, e outra dentro de um pacote Y elas podem tero mesmo nome, que o compilador não reclamará (Na verdade nem o seu SO vai deixar você criar dois arquivos com o mesmo nome dentro do mesmo diretório).
Isso acontece porque o nome inteiramente qualificado da classe é <pacote>+<nome da classe>, então o que se por exemplo nós tivermos uma classe Teste dentro de cada pacote, os nomes serão X.Teste e Y.Teste.
Quando usamos a classe File por exemplo temos que usar a instrução importa java.io.File. Isso serve para não precisarmos escrever java.io.File em todos os lugares que vamos utilizar a classe, podemos escrever apenas File que o compilador entenderá. A classe File na verdade esta dentro de dois pacotes, pois é podemos ter um pacote dentro do outro, primeiro o pacote java, e depois dentro dele o pacote io.
Quando vamos rodar uma classe pelo terminal, e esta se encontra dentro de um pacote nós temos que avisar o compilador. Pare isso nós vamos na raiz dos pacotes e passamos para ele a seguinte chamada
Enfim,
o erro acontece porque o compilador pensa que sua classe se chama “class” e está dentro do pacote “Welcome1”. Você pode notar que no exemplo acima não coloquei o .class no final, mas que utilizei pontos para separar os pacotes, é assim que o compilador sabe em quais diretórios sua classe está e pode executá-la.