| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2010 10:04:06
|
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2010 10:20:40
|
dyorgio
JavaEvangelist
![[Avatar]](/images/avatar/8a36dfc67ebfbbea9bd01cd8a4c8ad32.png)
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!!! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2010 10:20:50
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2010 10:28:08
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2010 10:41:08
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2010 10:43:21
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/03/2010 11:12:55
|
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
|
|
|
 |
|
|