[Resolvido] Como essa classe roda no Eclipse e não roda no Prompt de Comando (CMD)?

Oi amigos,

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();

	c. deposita(1000);
	cc.deposita(1000);
	cp.deposita(1000);
	
	c.atualiza(0.01);
	cc.atualiza(0.01);
	cp.atualiza(0.01);
	
	System.out.println(c.getSaldo());
	System.out.println(cc.getSaldo());
	System.out.println(cp.getSaldo());
	
}

}
[/code]

E aqui segue a classe ContaPoupança:

public class ContaCorrente extends Conta3{
	double CPMF = 0.10;
	
	double atualiza(double taxa){
		//this.saldo += this.saldo * taxa * 2;
		this.saldo += super.atualiza(taxa) * 2;
		return this.saldo;
	}

	public void deposita(double valor){
		this.saldo += valor - CPMF;
	}
}

O que estou fazendo errado para dar esse erro apenas no Prompt de Comando do Windows?
Agradeço a sua ajuda!

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=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.

Opa frostbyte.
Certifique-se que todos os .class estejam no mesmo diretório, já que não utilizou pacotes.

Oi!

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.

Abraços.

[quote=diego.sas]Opa frostbyte.
Certifique-se que todos os .class estejam no mesmo diretório, já que não utilizou pacotes.
[/quote]

Deixei os arquivos .class na mesma pasta.
As classes não estão em pacotes.

continua com problema. O que me revolta é que no Eclipse essa porcaria roda…

É 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.

Exatamente oq fiz…
Copilei as classes e executei pelo 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.

Tem certeza que foi exatamente assim?? Esse comando está com erro…

adiciona o diretório padrão nas suas variáveis de ambiente.

coloca .;<resto do que você colocaria na variavel>;

coloca isso dai tanto class_path quanto no path, ou no java_home para incluir nas duas se você ja estiver usando…

ou então na hora de executar troca

c:>java TestaContas

por

c:>java -cp .\ TestaContas

[quote=gomesrod][quote=frostbyte]

c:>javac -cp TestaContas.java

[/quote]
Tem certeza que foi exatamente assim?? Esse comando está com erro…
[/quote]

eu tinha estranhado o -cp desta forma mas ele disse que compilou…

Amigo frostbyte,

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”

por exemplo, no meu ficou assim:

“C:\Program Files\Java\jdk1.6.0_26\bin\javac.exe” -cp C:\Users\Dino\Documents\Workspace\Java\Caelum\Arrays C:\Users\Dino\Documents\Workspace\Java\Caelum\Arrays*.java

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 …”

qualqer duvida, estamos ai

Pessoal,

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.&lt;init&gt;(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).