Я работаю над набором простых агентов Java, чтобы помочь мне (и, надеюсь, другим) устранить неполадки в приложениях Java.Один из агентов, которого я хотел бы создать, - инструмент JComponent.getToolTipText (), чтобы быстро идентифицировать любой класс графического интерфейса, просто наведя на него курсор мыши.проект здесь:
http://sfn.cvs.sourceforge.net/viewvc/sfn/core/src/main/java/org/leplus/sfn/transformer/JComponentTransformer.java?view=markup
Я запускаю свой тестовый графический интерфейс с подключенным агентом следующим образом:
$ 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 содержит org.leplus.sfn.transformer.JComponentTransformer class.sfn-0.1-test.jar содержит класс org.leplus.sfn.test.Main.
Вот что печатает приложение, когда я запускаю его и налагаю на него мышь:
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)
...
Что меня удивляет, так это то, что если я изменю свой преобразователь на вызов любого класса из JRE, это сработает.Но это не работает, когда я вызываю свой собственный класс org.leplus.sfn.tracer.ComponentTracer.Моим первым предположением была проблема пути к классам, но ComponentTracer находится и в пути к классам, и в банке агента.Так что я потерян.
Если кто-нибудь из вас увидит, где я что-то упускаю.
Приветствия,
Том