나는 Create cross platform Java SWT Application에 설명 된 단계를 따랐습니다. swt 라이브러리를 사용하는 클래스 만 포함하는 swt_browser.jar가있는 jar 파일을 만듭니다. 그런 다음 다른 platrom 특정 swt 항아리를 추가했습니다. 아래 코드를 사용하여 swt_browser.jar 및 플랫폼 별 swt 라이브러리 jar를로드합니다. 하지만 SWTBrowser 클래스를로드하는 호출이 불평합니다 :jar-in-jar 클래스 로딩 문제
java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Layout
내가 뭘 잘못하고 있는지 말할 수 있습니까?
----- 로딩 SWT 단지에 대한 코드 -------
ClassLoader parent = Main.class.getClassLoader();
URL.setURLStreamHandlerFactory(new RsrcURLStreamHandlerFactory(parent));
URL swtBrowserFileUrl = new URL("rsrc:swt_browser.jar");
URL swtFileUrl = new URL("rsrc:" + swtFileName);
ClassLoader cl = new URLClassLoader(new URL[]{swtBrowserFileUrl, swtFileUrl}, parent);
Method addUrlMethod = URLClassLoader.class.getDeclaredMethod("addURL", URL.class);
addUrlMethod.setAccessible(true);
addUrlMethod.invoke(cl, swtBrowserFileUrl);
addUrlMethod.invoke(cl, swtFileUrl);
Thread.currentThread().setContextClassLoader(cl);
try {
// Check we can now load the SWT class -this check passes!
Class.forName("org.eclipse.swt.widgets.Layout", true, cl);
} catch (ClassNotFoundException exx) {
System.err.println("Launch failed: Failed to load SWT class from jar: " + swtFileName);
throw new RuntimeException(exx);
}
//this line below throws exception : java.lang.ClassNotFoundException: org.eclipse.swt.widgets.Layout
Class<?> c = Class.forName("com.sun.star.google.gui.SWTBrowser", true, cl);
Object obj = c.newInstance();
Method run = c.getMethod("run", url.getClass()); //$NON-NLS-1$
run.invoke(obj, new Object[]{url});
감사합니다. -i'll은 곧이 작업을 시도합니다. 조금 피곤해지기 때문에이 클래스 로딩 과정에서 약간 혼란 스럽습니다. – othman
나는 혼란에 빠졌습니다! 나는 무엇을 넣을 지 모른다! - 일부 코드 및이 설명을 일부 코드 단편에 패키지하는 방법에 대한 설명을 추가 할 수 있습니까? – othman
intrace-ui.jar의 ant 빌드 스크립트에 대한 링크를 추가했습니다. 당신이 혼란 스럽다는 것을 정확히 설명 할 수 있습니까? – mchr