Tenho algumas classes em meu workspace e que funcionam perfeitamente quando utilizo o Eclipse. Porém, eu quero praticar meus exercícios utilizando o Notepad++. Até aí tudo bem, o problema que tenho na verdade é na hora de executar no Prompt de Comando as classes que compilei. Algum amigo pode dizer o que ocorre?
Essa é a classe que compilo utilizando o seguinte comando:
c:>javac -cp . TestaContas.java
Para executar eu uso:
c:>java TestaContas
Obtenho o seguinte erro:
Exception in thread "main" java.lang.NoClassDefFoundError: TestaContas
Caused by: java.lang.ClassNotFoundException: TestaContas
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)
Could not find the main class: TestaContas. Program will exit.
E aqui o código da classe TestaContas:
[code]public class TestaContas {
public static void main (String[] args){
ContaCorrente c = new ContaCorrente();
ContaCorrente cc = new ContaCorrente();
ContaPoupanca cp = new ContaPoupanca();
Além das recomendações já passadas, sua classe possui um pacote?
Pois se sim, a compilação necessita saber a qual pacote essa classe pertence, caso contrário, realmente não vai encontra-la.
É estranho, no teste que efetuei, deu o mesmo erro devido ter o package nas classes.
Após remover os packages.
Copilei as classes e executei normalmente pelo prompt.
[quote=diego.sas]É estranho, no teste que efetuei, deu o mesmo erro devido ter o package nas classes.
Após remover os packages.
Copilei as classes e executei normalmente pelo prompt.[/quote]
Amigo Diego, você está rodando no eclipse isso? Se rodar no eclipse elas funcionam. O que quero é rodar no prompt do windows.
C:>java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
Não sei o que fazer pra ele encontrar o .class Já recompilei todas as classes e ainda persiste o erro. Tem algum cache pra limpar no java?
Só para complementar pessoal, eu desde que comecei a estudar java sempre fiz todos os exercícios em uma única pasta. Antes eu usava o Eclipse porém preciso treinar no notepad porque quero entender os erros de compilação/execução.
Depois de colocar TODAS as 3 classes no mesmo diretório.
No cmd, digite o seguinte
“Caminho da sua pasta JDK” “Pasta onde esta localizada suas classes” “E finalmente, recoloque o caminho, com a opçao de compilaçao de todos .java da pasta”
preste atençao nos espaços… o cmd trata de atribuir as aspas automaticamente kuando no meio do caminho alguma pasta contiver espaços em seu nome
esse meu exemplo pode ser escrito de qualquer pasta do cmd, mas se vc preferir, voce pode usar variaveis de ambiente, um script em lotes .bat, ou ir para a pasta bin da jdk e executar o javac sem ter q especificar seu caminho…
para a execuçao, va a pasta dos seus .class e .java e use o “java …”
Obrigado por sua ajuda! Consegui resolver, pelo menos parcialmente. Em outro computador as classes funcionam perfeitamente.
De qualquer forma, a solução que fiz foi mudar de computador, criar uma nova pasta, recompilar os arquivos e funcionou tudo.
UPDATE:
Bom pessoal, descobri finalmente o problema que acontecia com o meu notebook, era problema na configuração da CLASSPATH que causava o erro abaixo. Depois de reconfigurar, problema resolvido.
Exception in thread "main" java.lang.NoClassDefFoundError: Caused by: java.lang.ClassNotFoundException: 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)
Could not find the main class: Program will exit.
[quote=frostbyte][quote=maior_abandonado]da um javac - version para confirmar que sua variavel de ambiente está correta.
a classe não tem nenhum package ? vocÊ colou neste código todo o código do arquivo??[/quote]
javac -version
javac 1.6.0_24
As classes não tem pacote. Todas as classes que citei são em arquivos separados. Cada uma delas tem o respectivo arquivo com o mesmo nome de classe.[/quote]
Legal. Teu compilador está na versão correta.
A JVM está tbm?
use java -version
Outra coisa:
A linha at java.security.AccessController.doPrivileged(Native Method) do stackTrace me chamou um pouco a atenção.
Fiz um HelloWorld, compilei e executei com sucesso.
Fui até a classe e alterei as permissões, negando permissões de leitura e execução.
Veja o StackTrace gerado:
Exception in thread "main" java.lang.NoClassDefFoundError: Teste
Caused by: java.lang.ClassNotFoundException: Teste
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)
Caused by: java.io.FileNotFoundException: C:\Teste.class (Acesso negado)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.misc.URLClassPath$FileLoader$1.getInputStream(Unknown Source)
at sun.misc.Resource.cachedInputStream(Unknown Source)
at sun.misc.Resource.getByteBuffer(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
... 6 more
Could not find the main class: Teste. Program will exit.
Executei um outro comando, chamando um class inexistente:
Exception in thread "main" java.lang.NoClassDefFoundError: Testes
Caused by: java.lang.ClassNotFoundException: Testes
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)
Could not find the main class: Testes. Program will exit.
Esse último erro indica que o arquivo .class não existe (ou, por algum motivo, o java não consegue identificá-lo).