Erro na compilação - Não foi possível localizar... classe principal

Pessoal,

Estou utilizando o Eclipse para trabalhar com JAVA, e criei uma pasta chamada “ProjetosJava” em “C:\Users\Luan\Documents”, e lá foi criada a estrutura conhecida por todos, pasta “src” para .java e pasta “bin” para .class.

Dentro dessas duas pastas tem subpastas onde fica os códigos, pasta “um”, “dois” etc…

A partir do CMD, consigo tranquilo compilar:
C:\Users\Luan\Documents\ProjetoJava\src\sete>javac ArgumentosLinhaComando.java

Porém quando tento executar:
C:\Users\Luan\Documents\ProjetoJava\src\sete>java ArgumentosLinhaComando
Erro: Não foi possível localizar nem carregar a classe principal ArgumentosLinha Comando

1° Dúvida. Porque quando compilo, ao invés de ser criado o .class no diretório “ProjetoJava\bin\sete”, ele é criado no mesmo diretório que encontra-se o .java(ProjetoJava\src\sete)?

Seguindo…

Me deparando com o erro, copiei meu arquivo ArgumentosLinhaComando.java para “C:\Users\Luan\Documents”, editei meu código retirando a declaração “package sete;” do ínicio do código, daí fiz novamente o processo javac ArgumentosLinhaComando.java e java ArgumentosLinhaComando e funcionou!!!

Masss porque dessa forma funcionou?

Alguém pode me dá um boa explicação?

Obrigado,
Abs

Cara desculpe, não conheço nada de Eclipse, porem ela vai procurar a pasta que tem a linha.
"Public static void Main"
que é a classe principal, se no seu projeto não tem essa declaração em nenhuma de suas classes ele nao vai compilar da forma correta.

Espero que seja essa sua duvida, se não for desculpe. att.

hahaha não man, esse não é o problema, minha classe ta declarado o main. :grin:

Mas, obrigado pela a tentativa! :wink:

Pessoal, podem me ajudar por favor?

Porque este é o comportamento padrão do javac. Para escolher em qual diretório será colocados seus .class, use a opção d.

javac -d diretório_de_destino seu_arquivo.java

Importante notar que diretório_de_destinho já tem que existir, pois o javac não o criará sozinho.

Pelo seu enunciado vi que você está compilando de dentro da pasta sete. O correto seria compilar de dentro da pasta raiz do seu projeto, no caso “ProjetoJava”. Aí escollhendo o diretório de destinho, o comando seria esse:

C:\Users\Luan\Documents\ProjetoJava> javac -d bin src/sete/ArgumentosLinhaComando.java

Para executar seu programa que está dentro de “bin” a partir do diretório raiz, basta usar isso:

C:\Users\Luan\Documents\ProjetoJava> java -cp bin sete.ArgumentosLinhaComando.java

Normalmente o java procura por arquivos .class no diretório atual e em outros lugares especificos apenas. O -cp diz ao java para procurar sua classe no diretório “bin” também.

1 curtida

Ótimo Wellington, metade da minha dúvida foi sanada!

Agora essa parte:

Me deparando com o erro, copiei meu arquivo
ArgumentosLinhaComando.java para “C:\Users\Luan\Documents”, editei meu
código retirando a declaração “package sete;” do ínicio do código, daí
fiz novamente o processo “javac ArgumentosLinhaComando.java” e “java
ArgumentosLinhaComando” funcionou!!!

Masss porque dessa forma funcionou?

Tem alguma idéia?

Abs,
Luan

É simples.

Você está na pasta “Documents” e esta pasta contém o arquivo chamado “ArgumentosLinhaComando.java”. você usaria…

javac ArgumentosLinhaComando.java

para compilar e o .class resultante seria colocado nesta mesma pasta, logo, é só usar

java ArgumentosLinhaComando

E tudo funciona.

Quando você trabalha com packages ai que complica.

Imagine que você está em “Documents”. Você tem a seguinte classe:

// Test.java
package test;

public class Test { /* ... */ }

Para que tudo funcione ela deve ser salva em “Documents\test\Test.java”. Para compilar você usaria:

javac test\Test.java

e pra rodar:

java test.Test
1 curtida

Então man, é basicamente isso que estou fazendo.

Vamos lá,

1° - meu arquivo ArgumentosLinhaComando.java contém no ínicio a seguinte declaração package sete;

2° - Esse arquivo encontra-se no diretório C:\Users\Luan\Documents\ProjetoJava\src\sete

3° - Dei um cd no diretório C:\Users\Luan\Documents\ProjetoJava\src\sete (Estou na pasta onde encontra-se o arquivo)

4° - Compilo numa boa executando:

C:\Users\Luan\Documents\ProjetoJava\src\sete>javac ArgumentosLinhaComando.java

5° - O arquivo .class é criado normalmente no mesmo diretório, porém quando tento rodar:

C:\Users\Luan\Documents\ProjetoJava\src\sete>java ArgumentosLinhaComando
Erro: Não foi possível localizar nem carregar a classe principal ArgumentosLinha Comando

Para rodar tenho que colocar essa “” ou esse “.” como disse em sua última resposta, ficando assim:

C:\Users\Luan\Documents\ProjetoJava\src\sete>java sete\ArgumentosLinhaComando

ou

C:\Users\Luan\Documents\ProjetoJava\src\sete>java sete.ArgumentosLinhaComando

?

Me ajude por favor!

Primeira coisa, vc tá no diretório errado, saia de “sete”, fique em “src”. Rode com:

java sete.ArgumentosLinhaComando

1 curtida

Cara deu tudo certo! Muito obrigado!

Conseguir também uma boa explicação nesse site:

Abraço!

1 curtida