Como executar uma classe externa (um .class) por uma classe em execução java

11 respostas
DavidUser

Gente criei um botão em swing em uma classe que devia executar uma outra classe chamada criar.class , como eu executo essa classe em java? como eu devo criar o método? :!: :?

11 Respostas

otaviofcs

leia sobre reflect e Invoke (java.lang.reflect).

abraços,

Otávio

DavidUser

pode me dar um exemplo de invocação?

Guilherme_Gomes

Uma pergunta: que ferramenta de desenvolvimento você está usando?

DavidUser

Net Beans

DavidUser

o caminho da class é : “C:/Users/Administrador/Documents/NetBeansProjects/Agenda/build/classes/agenda/tela.class”

como eu chamo ela?

robson.java
import java.lang.reflect.Method;


public class Teste {

	public static void main(String[] args) {
		try {
			Object c = Class.forName("br.com.teste.ClassMethod").newInstance();
			Method m = c.getClass().getMethod("method", null);
			m.invoke(c, null);
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}
}
package br.com.teste;

public class ClassMethod {

	public void method() {
		System.out.println("bllaa");
	}
}
DavidUser

é só que a outra classe q to chamando tambem tem método principal

DavidUser

tem algum problema?

DavidUser

oque eu coloco no lugar do “method”?

ViniGodoy

Você deve responder as seguintes perguntas:
As duas classes fazem parte do mesmo class path?
SE FAZEM:
A classe do botão conhece a outra classe em tempo de compilação?
SE SIM:
Crie uma instância da outra classe com o new, chame o método diretamente:

criar c = new criar();
            c.umMetodoQualquer();
SE NÃO:
         Use reflexão:
Object c = Class.forName("br.com.teste.criar").newInstance();   
            Method m = c.getClass().getMethod("umMetodoQualquer", null);   
            m.invoke();
SE NÃO FAZEM PARTE DO MESMO CLASSPATH:
   Você vai usar reflexão também, mas antes terá que incluir a classe em seu classloader. Esse é um processo um pouco mais complicado, e duvido muito que esse seja o seu caso. Pelo jeito que você fez a pergunta, e pelo fato de você nem ter seguido o code convention, estou fortemente inclinado a pensar que a sua solução é a mais trivial de todas. Você  quer criar um objeto da classe B na A e chamar um método, sem nem sequer usar reflexão para isso.
otaviofcs

ViniGodoy, você tem razão, fui totalmente overkill!!! Só tem uma coisa estranha: as duas classes tem métodos main? Ou seja, são 2 programas em separado?

Criado 16 de abril de 2009
Ultima resposta 17 de abr. de 2009
Respostas 11
Participantes 5