Mudar classe em tempo de execução  XML
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Autor Mensagem
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Tem como mudar o código de uma classe em tempo de execução no JME?

www.bau-de-dev.com
GraveDigger
JavaEvangelist
[Avatar]

Membro desde: 07/07/2005 13:47:12
Mensagens: 354
Localização: Aracajú
Offline

Vc realmente precisa alterar A CLASSE em tempo de execução?

Alterar seu comportamento, talvez via strategy(http://en.wikipedia.org/wiki/Strategy_pattern) não seria suficiente para seu caso?

Abs

SCWCD
SCJP

Pedro Henrique Lobato Sena

otavio
JavaChild
[Avatar]

Membro desde: 01/08/2004 00:49:29
Mensagens: 139
Localização: JVM
Offline

CGLIB e Java Assist permitem manipulação de bytecode em runtime.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

O javassist eu estou usando.
Eu tive problema quando tentei usar esta API dentro de um aplicativo mobile, não compilou.
E em relação design parttner eu acho que não vai ajudar muito.
Porque eu quero "alterar" um método da classe MIDlet, para ser mais exato quero incluir algumas linhas no início do método.

www.bau-de-dev.com
GraveDigger
JavaEvangelist
[Avatar]

Membro desde: 07/07/2005 13:47:12
Mensagens: 354
Localização: Aracajú
Offline

Descreva um pouco melhor o que vc precisa fazer amigo, tenho quase certeza que strategy vai te ajudar sim.

Me diga seu cenário(o q vc quer fazer a mais) e eu te digo como o Strategy se encaixa ai, se for o caso.

Outra alternativa não tão usual seria a utilização de aspectos para interceptar a chama a seu método, visto q vc disse que quer colocar código no inicio do método, acho q caberia nesse caso.

De qq forma, ainda acredito que o Strategy caiba ai.

Abs

SCWCD
SCJP

Pedro Henrique Lobato Sena

Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Eu tenho que interceptar a chamada ao método MIDlet.notifyDestroy() de uma aplicação mobile.
Por exemplo, quando a aplicação chamar este método eu quero mostrar uma tela antes da aplicação "morrer".

www.bau-de-dev.com
GraveDigger
JavaEvangelist
[Avatar]

Membro desde: 07/07/2005 13:47:12
Mensagens: 354
Localização: Aracajú
Offline

Não manjo nada de mobile, mas vamos lá.

Esse método é static?

Caso não seja, vc não pode criar uma subclasse dessa sua classe e dar override nesse método de forma que ele faça o que vc deseja, e então, dps disso, chama super.notifyDestroy ?


SCWCD
SCJP

Pedro Henrique Lobato Sena

Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

O problema que o método é final.


www.bau-de-dev.com
GraveDigger
JavaEvangelist
[Avatar]

Membro desde: 07/07/2005 13:47:12
Mensagens: 354
Localização: Aracajú
Offline

hehe, a idéia é vc não dar override nele então

Se o método é final, deve haver um bom motivo, o que me leva a crer que o que vc quer fazer não é boa idéia.

Imagino que esse seja o método final do lifecycle do midlet e é final justamente pra vc não fazer nada que impeça o objeto de ser destruído(como mostrar uma janela com algo etc )

Acho melhor vc procurar por algo no método destroyApp, pelo visto, é nele que vc deve concentrar a lógica que vc deseja, não aconselho vc a seguir na idéia de fazer algo contra a especificação.

abs




SCWCD
SCJP

Pedro Henrique Lobato Sena

Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

Ai é que está o problema, eu também via o método destroyApp para isso, "matar a aplicação".
Mas tem programas que chamam direto o método notifyDestroyed. Por isso que eu queria incluir código neste método.

www.bau-de-dev.com
otavio
JavaChild
[Avatar]

Membro desde: 01/08/2004 00:49:29
Mensagens: 139
Localização: JVM
Offline

Jedi_FeniX wrote:
Eu tive problema quando tentei usar esta API dentro de um aplicativo mobile, não compilou.


Se você ler a especificação JME verá que a kvm é uma versão bem minima da JVM. Digamos uma versão pelada. Ou seja, muita coisa que você pode fazer no "java normal" não conseguirá.
Jedi_FeniX
Virtual Machine Man
[Avatar]

Membro desde: 26/04/2007 14:32:30
Mensagens: 586
Offline

É isso em relação a KVM eu sei.
Pelo visto vou ter que mudar a minha estratégia, porque já estou procurando uma solução para este problema a uns dias.
Vocês sabem se tem como varrer um código dentro de um .class atrás de uma linha de código? Isso seria no JSE.

www.bau-de-dev.com
rafaelSaqueli
Debugger
[Avatar]

Membro desde: 11/02/2009 22:02:48
Mensagens: 68
Offline

GraveDigger,


Estou com um problema que talvez possa me ajudar. Tenho uma classe A que extends Canvas, nela subscrevo o método abstract keyPressed(). Pois bem, preciso que este método trate os eventos do teclado de acordo com o desejado ao decorrer da execução. Ou seja, hora trate um botão de uma forma, outra hora trata o mesmo botão de forma totalmente diferente, de acordo com o que for necessário. É possivel resolver isso com algum padrão de projeto? Como + ou - funciona o Strategy que citou acima? Será que ele resolveria esse problema?

Obrigado.

Write once, run anywhere.
 
Índice dos Fóruns » Google Android e Java Micro Edition (ME)
Ir para:   
Powered by JForum 2.1.8 © JForum Team