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

15 respostas
F

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:
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());
		
	}
}
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!

15 Respostas

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??

F

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??

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.

diego.sas

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

nel

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.

F

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

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…

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.

F

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.

Amigo Diego, você está rodando no eclipse isso? Se rodar no eclipse elas funcionam. O que quero é rodar no prompt do windows.

diego.sas

Exatamente oq fiz…
Copilei as classes e executei pelo prompt do windows.

F

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.

gomesrod

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

maior_abandonado

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

maior_abandonado

gomesrod:
frostbyte:

c:>javac -cp TestaContas.java


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

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

pedrinho98765

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

F

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

frostbyte:
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??

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.


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

Criado 5 de julho de 2011
Ultima resposta 5 de jul. de 2011
Respostas 15
Participantes 7