Usando Reflection

7 respostas
RicardoCobain

Olá galera , estou tentando fazer um monitor de Threads… bem pra falar a verdade já fiz… hhehe
Mas é que ele está muito “mecanico”, ou seja eu fiz ele para monitorar 5 threads , e se eu quiser colocar mais uma vai ter que mexer em tudo… :?

Eu queria saber se tem algum modo de capturar os Label’s existemtes em uma classe e chamar o metodo setText() deles !?

tipo:

Field field = ThreadMonitor.class.getDeclaredField(“label1”);

JLabel label = (cast) field.<a>color=red</a>[/color]

label.setText(mensagem);

O Processo e assim:
O contructor da classe MonitorThread recebe um array de Threads e mantem uma referencia a esas threads…
Dai quando uma thread chamar o metodo setMensagem(this[esta thread], String mensage)… A mensagem é exibida em um label correspondente…
Tipo:

public void setMensage(Thread thread, String mensagem) { if (threads[0] != null && threads[0].equals(thread)){ labThread0.setText(mensagem); } if (threads[1] != null && threads[1].equals(thread)){ labThread1.setText(mensagem); } if (threads[2] != null && threads[2].equals(thread)){ labThread2.setText(mensagem); } if (threads[3] != null && threads[3].equals(thread)){ labThread3.setText(mensagem); } if (threads[4] != null && threads[4].equals(thread)){ labThread4.setText(mensagem); } }

Desde já agradeço…

7 Respostas

Aldrin_Leal

Porque não criar um vetor labThreads com cada uma dessas ‘labThreads’?

RicardoCobain

è uma boa, só que como eu tou usando o NetBeans pra desenhar a “interface” desse monitor ai num dá.
O jeito seria fazer a interface na mão, mas é meio complicado…
Vou ver isso…

Mas eu preciso dessa resposta pra outras coisas que eu quero/queria fazer…
quem puder ajudar… heh

gfronza

Eu também optaria pela idéia do Aldrin, mas se queres usar reflection também é legal para praticar…
Bom reflection é simples de usar, a base dela esta na class Class do java, um exemplo de reflection para obter os métodos de uma classe:

TuaClasse.class.getDeclaredMethods()

se deres um control + espaço depois de escrever TuaClasse.class. vais ver o que podes fazer sobre essa sua classe…

Valeu!

RicardoCobain

Bem eu consigo ver os “componentes” de uma classe executar uns metodos, mas não consigo alterar o valor de uma variavel/field …

G

Eu não entendi direito o que você quer fazer. Mas você pode usar os métodos get() (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Field.html#get(java.lang.Object)) e set() (http://java.sun.com/j2se/1.4.2/docs/api/java/lang/reflect/Field.html#set(java.lang.Object,%20java.lang.Object)) da classe Field. Só esteja atento à classe que está chamando, pois ela precisa ter acesso a essa variável, ou ser public ou protected e vcs no mesmo pacote ou você estar na hierarquia da classe.

RicardoCobain

Seria pegar todos os label que tem o nome como labThreadX é alterar o texto deles…
Mas já pelegei e não consigo…

que souber fazer isso…

mgarcia

com reflection é possível alterar o valor de atributos de classe, saber quais atributos e etc…
qnto à proteção, pode não ser mto elegante, mas o reflection tem o método setAccessible que quebra o encapsulamento…

Criado 18 de agosto de 2007
Ultima resposta 27 de dez. de 2007
Respostas 7
Participantes 5