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? :!: :?
Como executar uma classe externa (um .class) por uma classe em execução java
11 Respostas
leia sobre reflect e Invoke (java.lang.reflect).
abraços,
Otávio
pode me dar um exemplo de invocação?
Uma pergunta: que ferramenta de desenvolvimento você está usando?
Net Beans
o caminho da class é : “C:/Users/Administrador/Documents/NetBeansProjects/Agenda/build/classes/agenda/tela.class”
como eu chamo ela?
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");
}
}
é só que a outra classe q to chamando tambem tem método principal
tem algum problema?
oque eu coloco no lugar do “method”?
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ê só quer criar um objeto da classe B na A e chamar um método, sem nem sequer usar reflexão para isso.
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?