我遵循Create cross platform Java SWT Application中描述的步驟。我創建了一個包含swt_browser.jar的jar,其中只包含使用swt庫的我的類。然後我添加了其他特定於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 build腳本的鏈接。你能澄清一下你對此感到困惑嗎? – mchr