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

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.

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…

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

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.

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?

[quote=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?[/quote]

Sim. Esse é um dos objetivos do package

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