Pregunta

Estoy trabajando en un kit de agentes simples de Java para mí (y es de esperar que otros) Solucionar problemas de aplicaciones Java ayudar. Uno de los agentes me gustaría crear instrumentos el método JComponent.getToolTipText () para identificar rápidamente cualquier clase GUI con sólo desplazar el cursor del ratón sobre él.

Puede encontrar el código de mi transformador y el resto del proyecto aquí:

http://sfn.cvs.sourceforge.net/viewvc/sfn/core/src/main/java/org/leplus/sfn/transformer/JComponentTransformer.java?view=markup

pongo en marcha mi interfaz gráfica de usuario de prueba con el agente adjunto de la siguiente manera:

$ java -javaagent:target/jars/sfn-0.1-agent.jar=JComponent -cp lib/jars/bcel-5.2.jar:target/jars/sfn-0.1-test.jar:target/jars/sfn-0.1-agent.jar org.leplus.sfn.test.Main

SFN-0,1-agent.jar contiene la clase org.leplus.sfn.transformer.JComponentTransformer. SFN-0,1-test.jar contiene la clase org.leplus.sfn.test.Main.

Esto es lo que la aplicación imprime cuando inicio y me pusieron el ratón sobre ella:

Loading agent: JComponent
Instrumentation ready!
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/leplus/sfn/tracer/ComponentTracer
 at javax.swing.JComponent.getToolTipText(JComponent.java)
 at javax.swing.ToolTipManager$insideTimerAction.actionPerformed(ToolTipManager.java:662)
...

Lo que es sorprendente para mí es que si cambio de transformador para llamar a cualquier clase de JRE, funciona. Pero no funciona cuando llamo mi propia org.leplus.sfn.tracer.ComponentTracer clase. Mi primera suposición era un problema de ruta de clases, pero el ComponentTracer es tanto en la ruta de clase y en el tarro del agente. Por lo tanto, estoy perdido.

Si alguno de ustedes ver donde estoy perdiendo algo.

Saludos,

Tom

¿Fue útil?

Solución

Es una cuestión de cargador de clases. Usted está instrumentando una clase (javax.swing.JComponent), gestionado por el cargador de clases de arranque, y hacer que se refiere a una clase (org.leplus.sfn.tracer.ComponentTracer), gestionado por el cargador de clases del sistema.

Si usted pone su clase ComponentTracer en el cargador de clases de arranque, el problema debería desaparecer.

java -Xbootclasspath/p:<path/to/jar/containing/ComponentTracer> -javaagent:...

Otros consejos

Trate de correr con -DDEBUG ya que le podría mostrar más información.

También, ver el directorio de destino aquí. http://sfn.cvs.sourceforge.net/viewvc/sfn/core/ target / contiene una carpeta de clases, pero no hay carpeta frascos? Asegúrese de que los caminos tarro son relativas a la raíz del proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top