Solucionado (ver solução)
Solucionado
(ver solução)
27
respostas

Porque compila mas não roda?

public class MeuProgramaModificado {

public static void main(String[] args) { System.out.println("Este é o meu primeiro programa"); } }

OBS.: Consigo compilar com javac MeuProgramaModificado

Ele cria o bytecode MeuProgramaModificado.class

Mas quando rodo com java MeuProgramaModificado, aparece a seguinte menssagem: Erro:Não foi possível localizar nem carregar a classe principal MeuProgramaModificado

Não consigo entender pois os arquivos estão dentro do diretório onde estou executando.

27 respostas

Weslen, a variável de ambiente do Java foi configurada? Qual Sistema Operacional você está utilizando?

Oi Weslen,

Realmente não faz sentido algum. Se o .class está no diretório, ele deveria executar.

Você digitou corretamente, certo? Tenta dar um nome menor pra classe, pra garantir mesmo que não há erros de digitação, hehe. Tipo class Teste no arquivo Teste.java.

Me diga se funcionou.

Sim já configurei a variável de ambiente,

JAVA_HOME e no campo valor: com o caminho correto do diretório onde o java foi instalado

E também já configurei a variável de ambiente Path, com o caminho correto também.

Tanto é que se eu digitar javac -version no prompt de comando executa normalmente e mostra a versão do java.

Estou utilizando o windows 7 Ultimate 32bits

Maurício eu já renomeei mas mesmo assim continua o erro. Ele compila criando bytecode Teste.class mas quando digito java Teste dá o mesmo erro, dizendo que não encontrou o arquivo. hehehe que mistério.

Pode verificar que javac -version e java -version estão na mesmo versão.

Weslen, cole o classpath e o JAVA_HOME para que possamos ver se há algum erro.

Diogo não estão. No javac -version , retorna: javac 1.7.0_45

No java -version, retorna: java version "1.7.0_60"

João colei aí o JAVA_HOME e o Path

JAVA_HOME C:\Program Files\Java\jdk1.7.0_45

Path %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\MySQL\MySQL Server 5.5\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\Java\jdk1.7.0_45

Modifique seu variável de ambiente Path iniciando com %JAVA_HOME%\bin em primeiro e execute o programa com java -cp . MeuProgramaModificado antes compile.

Diogo com o comando java Teste, não rodou deu a mensagem de erro dizendo que não encontrava o arquivo.

Já com o comando java -cp . Teste , rodou normal.

Porque isso acontece?

Digo e lembrando eu troquei já a variável de ambiente Path para %JAVA_HOME%\bin e executei com o java - cp. Teste, e funcionou.

Porque só funciona com o java -cp . Teste, e não só java?

o -cp do java: pesquisa o caminho da classe principal dos diretórios e arquivos e encontrou sua classe.

É Diogo, então parece que vou ter que mandar pesquisar com o -cp todos os programas e próximos exercícios que eu fizer.

Super estranho precisar setar o classpath para o próprio path da pasta que vc está...

Oi Weslen,

Por desencargo de consciência, confere se você não declarou nenhum pacote nessa classe. Caso tenha declarado, a classe compila, mas na hora de rodar ele não consegue achar :(.

Abraço,

Alberto

O meu classpath está assim: CLASSPATH Program Files\Java\jre7\lib\ext\QTJava.zip

Mas estou pensando que o classpath deveria apontar para o diretorio do jdk e não do jre7 como está ai, e porque ele aponta para esse arquivo QTJava.zip? Algém sabe me dizer se está correto assim como acima ?

Não deveria apontar pra QT não. Remova a variável, você não precisa dela. O JAVA_HOME é suficiente.

Alberto eu não declarei nenhum pacote dentro desta classe não. Inclusive ela se encontra em:

C:\Users\Usuario\workspace\Alura\Capitulo1\src

Será que o fato de ela estar em um projeto dentro do workspace (Alura), interfere e pode dar algum problema na hora de compilar e rodar através do prompt de comando? Estou compilando e rodando já dentro da pasta src, mas mesmo assim diz que não consegue encontrar o arquivo da classe que estou tentando rodar.

Maurício removi a variável classpath mas não resolveu continua não rodando, e só roda se eu usar java -cp . MeuProgramaModificado

Oi Weslen,

Conversando aqui, muita gente disse que alguns Windows ficam meio doidos com algumas versões do Java, e vc precisa passar o -cp . sim.

Então faça assim, ok?

Logo quando vc chegar no capítulo de Eclipse, isso passa! :)

weslen, verifique se você tem mais de uma versão do java instalado na máquina. Dou suporte a alguns clientes que usam vários programas da receita federal e caixa econômica, e quando eles tem mais de uma versão do java instalado os programas ficam loucos. Não se esse é o caso, mas o java, diferentemente do .net framework é instável com relação a várias versões em uma mesma maquina. Ele não se comporta da mesma maneira em sistemas operacionais diferentes. Em alguns não dá problemas mas em outros sim, principalmente se seu sistema for 64 bits.

solução!

Entendo Sandro, não vou poder reinstalar o JAVA aqui porque este PC é da empresa que trabalho e temos alguns aplicativos aqui que dependem dessas pré instalações que fizemos do JAVA, então vou utilizar rodar os exercícios do curso (Alura), com a opção "-cp . " que funciona blz, e esperar mesmo chegar no Eclipse.

Você também pode usar uma máquina virtual, como o virtualbox ou o Windows Virtual PC (eu uso este último, não gostei muito do virtualbox, mas é uma questão pessoal). A vantagem é que a máquina virtual pode rodar o sistema operacional que você preferir e usar a versão do java mais atual sem mexer em nada na máquina física. O único requisito é que o seu processador suporte virtualização.

Legal, boa dica. Vou ver essa possibilidade aqui. Porque meu PC não é dos melhores. Mas realmente seria uma boa solução para estudar sem prejudicar o que temos instalado aqui. Valew ai.

Estou com uma versão apenas do Java instalado, o -cp não funciona, o problema persiste. Mais alguma sugestão do que pode ser?

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software