mirror of https://github.com/mchr3k/org.intrace
Fix SWT loading
This commit is contained in:
parent
a868566717
commit
67eee4522b
|
|
@ -73,6 +73,7 @@
|
|||
|
||||
<target name="jar" description="Create Jars" depends="build,getgitdetails" >
|
||||
|
||||
<mkdir dir="./build/tmp/" />
|
||||
<mkdir dir="./build/jars/" />
|
||||
|
||||
<!-- Test Trace Agent -->
|
||||
|
|
@ -103,19 +104,25 @@
|
|||
<rule pattern="org.objectweb.asm.**" result="org.intrace.internal.objectweb.asm.@1"/>
|
||||
</jarjar>
|
||||
|
||||
<!-- UI -->
|
||||
<!-- UI (Stage 1) -->
|
||||
<jarjar jarfile="./build/tmp/intrace-ui-wrapper.jar">
|
||||
<fileset dir="./build/classes" includes="**/shared/*.class" />
|
||||
<fileset dir="./build/classes" includes="**/client/gui/**/*.class" />
|
||||
<zipfileset excludes="META-INF/*.MF" src="lib/miglayout-3.7.3.1-swt.jar"/>
|
||||
</jarjar>
|
||||
|
||||
<!-- UI (Stage 2) -->
|
||||
<jarjar jarfile="./build/jars/intrace-ui.jar">
|
||||
<manifest>
|
||||
<attribute name="Main-Class" value="org.intrace.client.gui.TraceClientLoader" />
|
||||
<attribute name="Main-Class" value="org.intrace.client.loader.TraceClientLoader" />
|
||||
<attribute name="Class-Path" value="." />
|
||||
<attribute name="Git-Revision" value="${git.revision}" />
|
||||
<attribute name="Implementation-Version" value="${git.tag}" />
|
||||
</manifest>
|
||||
<fileset dir="./build/classes" includes="**/shared/*.class" />
|
||||
<fileset dir="./build/classes" includes="**/client/gui/**/*.class" />
|
||||
<fileset dir="./build/classes" includes="**/client/loader/*.class" />
|
||||
<fileset dir="./build/tmp" includes="intrace-ui-wrapper.jar" />
|
||||
<fileset dir="./lib" includes="swt-*.jar" />
|
||||
<zipfileset excludes="META-INF/*.MF" src="lib/miglayout-3.7.3.1-swt.jar"/>
|
||||
<zipfileset excludes="META-INF/*.MF" src="lib/jar-in-jar-loader.jar"/>
|
||||
<zipfileset excludes="META-INF/*.MF" src="lib/jar-in-jar-loader.jar"/>
|
||||
</jarjar>
|
||||
</target>
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
package org.intrace.client.gui;
|
||||
package org.intrace.client.loader;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
|
|
@ -12,8 +12,8 @@ public class TraceClientLoader
|
|||
{
|
||||
public static void main(String[] args) throws Throwable
|
||||
{
|
||||
ClassLoader cl = getSWTClassloader();
|
||||
Thread.currentThread().setContextClassLoader(cl);
|
||||
ClassLoader cl = getSWTClassloader();
|
||||
Thread.currentThread().setContextClassLoader(cl);
|
||||
try
|
||||
{
|
||||
Class<?> c = Class.forName("org.intrace.client.gui.TraceClient", true, cl);
|
||||
|
|
@ -36,41 +36,33 @@ public class TraceClientLoader
|
|||
|
||||
private static ClassLoader getSWTClassloader()
|
||||
{
|
||||
ClassLoader cl = Thread.currentThread().getContextClassLoader();
|
||||
ClassLoader parent = Thread.currentThread().getContextClassLoader();
|
||||
URL.setURLStreamHandlerFactory(new RsrcURLStreamHandlerFactory(parent));
|
||||
|
||||
String swtFileName = getSwtJarName();
|
||||
try
|
||||
{
|
||||
// Check if SWT if already loaded
|
||||
Class.forName("org.eclipse.swt.widgets.Layout");
|
||||
}
|
||||
catch (ClassNotFoundException ex)
|
||||
{
|
||||
// SWT not available - we need to load the correct one
|
||||
ClassLoader parent = cl;
|
||||
URL.setURLStreamHandlerFactory(new RsrcURLStreamHandlerFactory(cl));
|
||||
URL intraceFileUrl = new URL("rsrc:intrace-ui-wrapper.jar");
|
||||
URL swtFileUrl = new URL("rsrc:" + swtFileName);
|
||||
ClassLoader cl = new URLClassLoader(new URL[] {intraceFileUrl, swtFileUrl}, parent);
|
||||
|
||||
String swtFileName = getSwtJarName();
|
||||
try
|
||||
{
|
||||
URL swtFileUrl = new URL("rsrc:" + swtFileName);
|
||||
cl = new URLClassLoader(new URL[] {swtFileUrl}, parent);
|
||||
|
||||
try
|
||||
{
|
||||
// Check we can now load the SWT class
|
||||
Class.forName("org.eclipse.swt.widgets.Layout", true, cl);
|
||||
}
|
||||
catch (ClassNotFoundException exx)
|
||||
{
|
||||
System.err.println("Failed to load SWT jar: " + swtFileName);
|
||||
throw new RuntimeException(exx);
|
||||
}
|
||||
// Check we can now load the SWT class
|
||||
Class.forName("org.eclipse.swt.widgets.Layout", true, cl);
|
||||
}
|
||||
catch (MalformedURLException exx)
|
||||
catch (ClassNotFoundException exx)
|
||||
{
|
||||
System.err.println("Failed to load SWT jar: " + swtFileName);
|
||||
throw new RuntimeException(exx);
|
||||
}
|
||||
}
|
||||
return cl;
|
||||
}
|
||||
|
||||
return cl;
|
||||
}
|
||||
catch (MalformedURLException exx)
|
||||
{
|
||||
throw new RuntimeException(exx);
|
||||
}
|
||||
}
|
||||
|
||||
private static String getSwtJarName()
|
||||
Loading…
Reference in New Issue