Problemas para executar um arquivo .class pela linha de comando. [RESOLVIDO]

6 respostas
leonardo.moreti

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

Tenho este arquivo MyClass.java :

public class MyClass {

	private int accountNumber;
	private float balance;
	
	public static void main(String[] args) {
	
		System.out.println("Classe " + MyClass.class + " executando...");
	}
}

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:

package com.wickedlysmart;

public class MyClass2 {

	public static void main(String[] args) {
		System.out.print("teste");
	}
}

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.

6 Respostas

dyorgio

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…

E
Exception in thread "main" java.lang.NoClassDefFoundError: MyClass2 (wrong name:
com/wickedlysmart/MyClass2

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

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

Jair_Rillo_Junior

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.

leonardo.moreti

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

leonardo.moreti:
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

leonardo.moreti

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

Criado 2 de março de 2010
Ultima resposta 2 de mar. de 2010
Respostas 6
Participantes 4