자바 class loader 의 정리

1.  classloader.loadclass 와 class.forName 의 차이
http://stackoverflow.com/questions/4285855/difference-betweeen-loading-a-class-using-classloader-and-class-forname
http://www.javaworld.com/javaworld/javaqa/2003-03/01-qa-0314-forname.html
http://www.javalobby.org/java/forums/t18345.html
http://java.sun.com/developer/technicalArticles/Networking/classloaders/
class.forName() 불 러 오 는 클래스 의 정적 블록 을 실행 합 니 다.데이터 베 이 스 를 불 러 오 는 드라이브 는 loadclass 가 아 닌 class.forName 입 니 다.
2.  자바 웹 start 가 시작 하 는 프로그램 을 어떻게 디 버 깅 합 니까?
http://docs.oracle.com/javase/1.5.0/docs/guide/javaws/developersguide/troubleshooting.03.06.html
http://lopica.sourceforge.net/faq.html#debug
start JNLP with debug option
refer to http://stackoverflow.com/questions/1669673/remote-debugging-a-jnlp-application-with-eclipse andhttp://stackoverflow.com/questions/686061/how-can-i-debug-applications-under-java-web-start-jnlp
set JAVAWS_TRACE_NATIVE=1
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws http://server:port/descriptor.jnlp

1)      double launch problem
download the app.jnlp to local, and start javaws in the same directory with the jnlp file
2)      can’t start listen problem
check your java installation directory, if it contains space, like ‘program files’, you have to start javaws like below script (save as debug.bat i.e.),
java -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8989 -Djnlpx.heapsize=64m,512m -DtrustProxy=true -Xverify:remote -Djava.security.policy="file:D:\Program Files\Java\jdk1.6.0_22\jre\lib\security\javaws.policy" -Xbootclasspath/a:"D:\Program Files\Java\jdk1.6.0_22\jre\lib\deploy.jar";"D:\Program Files\Java\jdk1.6.0_22\jre\lib\javaws.jar";"D:\Program Files\Java\jdk1.6.0_22\jre\lib\plugin.jar" -classpath "D:\Program Files\Java\jdk1.6.0_22\jre\lib\deploy.jar" com.sun.javaws.Main app.jnlp
3.
print the classes loaded by a class loader,반사 체 제 를 사용 하여 어떤 종 류 를 불 러 왔 는 지 가 져 옵 니 다.
                 Field f;
                  f = ClassLoader.class.getDeclaredField("classes");
                  f.setAccessible(true);
                 
                  System.out.println("classes loaded by URL class loader: ");
                 
                  Vector classes1 =(Vector) f.get(Plug.class.getClassLoader());
                 for(Class c : classes1){
                     System.out.println(c);
                  }
4.  URLClassLoader
jar 가방 을 불 러 온 후,jar 가방 의 모든 종 류 를 가상 컴퓨터 에 불 러 오지 않 았 습 니까?아 닙 니 다.참고 할 만하 다http://stackoverflow.com/questions/7571551/how-to-load-all-classes-of-a-jar-file-at-runtime
5.  Thread.currentThread().setContextClassLoader(classLoader);
프로그램 에 class.forName()이 ClassNotFound 이상 을 던 졌 을 때 현재 스 레 드 의 ContextClassLoader 에 필요 한 클래스 를 불 러 왔 는 지 고려 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기