Iniciante - Execução de um programa simples exige uma classe principal. O Java mudou?

5 respostas
A

Prezados colegas do fórum,

Em primeiro lugar me desculpe por minhas perguntas idiotas (sou inciante em Java e não sei se os colegas terão paciência para me aturar).

Comecei a estudar por conta pŕopria em 2006, mas precisei parar por inúmeros motivos. Agora estou retornando aos estudos sobre esta excelente linguagem.

Vamos ao assunto:

Instalei o JDK 6 em meu sistema (Linux Fedora 10), configurei o CLASSPATH com a ajuda do tutorial fornecido neste site pelo colega Guilherme Inocencio (excelente tutorial). Tudo funcionou perfeitamente.

Escrevi um programa pequeno, apenas para testar o Java, segue o código:

[color=blue]

public class Primeiro

{

public static void main( String args[] )

{

System.out.println(Este é o meu primeiro programa Java em Linux);

}

}[/color]

Compilei o código com o comando “javac” com sucesso.

Mas quando fui executar o programa o shell retornou o seguinte erro:

Exception in thread main java.lang.NoClassDefFoundError: Primeiro

Caused by: java.lang.ClassNotFoundException: Primeiro

at java.net.URLClassLoader$1.run(URLClassLoader.java:217)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:205)

at java.lang.ClassLoader.loadClass(ClassLoader.java:323)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)

at java.lang.ClassLoader.loadClass(ClassLoader.java:268)

at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:336)

Could not find the main class: Primeiro. Program will exit.

Então fica a pergunta:

O JAVA MUDOU? Que classe principal é esta? :?

Sempre usei este mesmo código para testar o Java e funcionava.

Desde já, muito obrigado.

Abraços.

P.S.: Desculpem-me pela minha ignorância no assunto.

5 Respostas

J

Tente executar a sua classe da seguinte forma…

java -cp . Primeiro

se executar, provavelmente seu classpath está com algum problema…

[]'s

A

Jhonatan, em primeiro lugar, muito obrigado pela rápida resposta!

Funcionou da maneira como você me recomendou. O programa foi executado.

Agora resta localizar o problema com o CLASSPATH.

Muito obrigado pela resposta!

A

Já revisei o CLASSPATH, já incluí as entradas até mesmo nos arquivos /[color=blue]etc/bashrc[/color] e[color=blue] /etc/profile[/color] e o problema continua.

Configurei o classpath da seguinte maneira:

JAVA_HOME=/usr/local/jdk1.6.0_13
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CLASSPATH=$JAVA_HOME/lib
export CLASSPATH
MANPATH=$MANPATH:$JAVA_HOME/man
export MANPATH

Alguém tem alguma dica ou sugestão?

Desde já, obrigado.

T

Esse CLASSPATH que você mencionou (indicando apenas o diretório /lib) é inadequado, já que é o nome de um diretório que não contém arquivos .class. Se você quer pôr algo no CLASSPATH, ele deve ser nomes de diretórios que contém arquivos .class, e também nomes de arquivos .jar (que são equivalentes para o Java a diretórios). O tal CLASSPATH que você programou costuma ter apenas alguns arquivos .jar, e nenhum deles você irá usar.

Eu prefiro deixar essa variável vazia, para não dar confusão, ou então pôr o valor:

CLASSPATH=.

só para você não ter que ficar digitando sempre

java [color=red]-cp .[/color] …

A

Thingol,

Muito obrigado pela ajuda! CONSEGUI!

Realmente, deixando o CLASSPATH definido como “CLASSPATH=.” resolve o problema.

Muito obrigado pela ajuda.

Quero deixar meus agradecimentos ao Jhonatan também.

Acho que este assunto já pode ser encerrado.

Espero alcançar logo um bom nível de conhecimento para poder ajudar outros colegas também!

Abraços!

Criado 8 de abril de 2009
Ultima resposta 8 de abr. de 2009
Respostas 5
Participantes 3