Java 응용 프로그램의 문제를 해결하는 데 도움이되는 간단한 Java 에이전트 키트를 준비 중입니다. 내가 만들고자하는 에이전트 중 하나는 JComponent.getToolTipText() 메서드를 사용하여 GUI 클래스 위에 마우스 커서를 올려 놓음으로써 GUI 클래스를 신속하게 식별 할 수 있습니다.Instrumented 메서드에서 자신의 클래스를 호출 할 때 Java NoClassDefFoundError
당신은 내 변압기의 코드와 여기에 프로젝트의 나머지 부분을 찾을 수 있습니다
$ 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- :
나는 다음과 같이 부착 된 에이전트와 내 테스트 GUI를 실행 0.1-agent.jar에는 org.leplus.sfn.transformer.JComponentTransformer 클래스가 들어 있습니다. 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를 호출하면 작동하지 않습니다. 내 첫 번째 추측은 classpath 문제 였지만 ComponentTracer는 classpath와 에이전트의 jar 모두에있다. 그래서 나는 길을 잃었다.
내가 누락 된 부분이 있으면 알려주세요. 그것은 당신에게 더 많은 정보를 표시 할 수 있습니다로
건배,
톰
좋아, 이제 알았어. 고마워, 톰. –
미래의 독자를 위해, 부트 스트랩 클래스 로더는 많은 유일한 자원에 의해 원시 클래스 로더라고도 불린다. 마찬가지로 시스템 클래스 로더는 응용 프로그램 클래스 로더라고도합니다. –