Problemas para executar um arquivo .class pela linha de comando. [RESOLVIDO]  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
leonardo.moreti
Entusiasta Java

Membro desde: 30/10/2009 08:22:49
Mensagens: 18
Localização: Sorocaba/SP
Offline

Pessoal, é o seguinte, estou tendo problemas para executar um arquivo .class

Tenho este arquivo MyClass.java :



O path dele é my project\source\com\wickedlysmart\MyClass.java

Dentro do diretório dele eu executei o comando javac -d ..\..\..\classes\com\wickedlysmart MyClass.java

Até aqui tudo bem, o arquivo .class resultante foi colocado pelo javac em my project\classes\com\wickedlysmart\MyClass.class

Ok, depois disso eu fui nesse diretório e executei a classe com o comando java MyClass.

Perfeito, funcionou normal. Mas agora tenho o arquivo MyClass2.java:



Este arquivo está no mesmo diretório que o arquivo MyClass.java, a única diferença é que ele tem uma instrução package. Pois bem, executei o comando javac -d ..\..\..\classes MyClass2.java, e o arquivo compilou normalmente e o .class resultante foi colocado em my project\classes\com\wickedlysmart\MyClass2.class (junto com o outro).

Ok, é aqui que está o problema. Quando vou no diretório onde está a classe e tento executá-la com java MyClass2, aparece o seguinte erro:

Exception in thread "main" java.lang.NoClassDefFoundError: MyClass2 (wrong name:
com/wickedlysmart/MyClass2)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
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)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: MyClass2. Program will exit.


Alguem pode me ajudar? Será que é por causa da instrução package? Quando não tem a instrução package tudo funciona normalmente (como na primeira classe), mas quando tem essa instrução as coisas complicam.

This message was edited 1 time. Last update was at 02/03/2010 11:13:42

dyorgio
JavaEvangelist
[Avatar]

Membro desde: 05/05/2005 20:03:20
Mensagens: 323
Localização: Porto Alegre - RS
Offline

vc não pode chamar a classe diretamente
pois ela esta num pacote

tens que chamar

java pacote.da.sua.classe.SuaClasse

acredito que apenas na raiz do pacote funcione tb...

I can fly!!!
[Email] [MSN]
entanglement
GUJ Hacker

Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline



realmente é por causa da instrução "package". Você deve chamar a classe como:

java -cp ..\..\..\classes\ com.wickedlysmart.MyClass2

This message was edited 1 time. Last update was at 02/03/2010 10:21:15

Jair Rillo Junior
Moderador
[Avatar]

Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline

Assim como você compilou, faz o mesmo para rodar o java como os amigos já disseram.

Dê uma estudada direitinho sobre package e creio que você vai entender melhor o seu funcionamento.

Jair Rillo Junior

http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate
leonardo.moreti
Entusiasta Java

Membro desde: 30/10/2009 08:22:49
Mensagens: 18
Localização: Sorocaba/SP
Offline

Executei o comando que o entanglement disse, e funcionou corretamente!

Percebi que:

- Se uma classe tem uma instrução package, você não pode chamá-la só pelo seu nome simples, é obrigatório chamá-la
pelo seu nome totalmente qualificado, sempre. É isto mesmo?
Jair Rillo Junior
Moderador
[Avatar]

Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline

leonardo.moreti wrote:Executei o comando que o entanglement disse, e funcionou corretamente!

Percebi que:

- Se uma classe tem uma instrução package, você não pode chamá-la só pelo seu nome simples, é obrigatório chamá-la
pelo seu nome totalmente qualificado, sempre. É isto mesmo?


Sim. Esse é um dos objetivos do package

Jair Rillo Junior

http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate
leonardo.moreti
Entusiasta Java

Membro desde: 30/10/2009 08:22:49
Mensagens: 18
Localização: Sorocaba/SP
Offline

Ok Jair, muito obrigado pela ajuda!

Mais tarde vou postar outro tópico sobre mais uma dúvida que tenho em relação java e javac!

Abs
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team