Search in sources :

Example 1 with ZipClassLoader

use of com.cburch.logisim.util.ZipClassLoader in project logisim-evolution by reds-heig.

the class Loader method loadJarFile.

Library loadJarFile(File request, String className) throws LoadFailedException {
    File actual = getSubstitution(request);
    // Up until 2.1.8, this was written to use a URLClassLoader, which
    // worked pretty well, except that the class never releases its file
    // handles. For this reason, with 2.2.0, it's been switched to use
    // a custom-written class ZipClassLoader instead. The ZipClassLoader
    // is based on something downloaded off a forum, and I'm not as sure
    // that it works as well. It certainly does more file accesses.
    // Anyway, here's the line for this new version:
    ZipClassLoader loader = new ZipClassLoader(actual);
    // And here's the code that was present up until 2.1.8, and which I
    // know to work well except for the closing-files bit. If necessary, we
    // can revert by deleting the above declaration and reinstating the
    // below.
    /*
		 * URL url; try { url = new URL("file", "localhost",
		 * file.getCanonicalPath()); } catch (MalformedURLException e1) { throw
		 * new LoadFailedException("Internal error: Malformed URL"); } catch
		 * (IOException e1) { throw new
		 * LoadFailedException(Strings.get("jarNotOpenedError")); }
		 * URLClassLoader loader = new URLClassLoader(new URL[] { url });
		 */
    // load library class from loader
    Class<?> retClass;
    try {
        retClass = loader.loadClass(className);
    } catch (ClassNotFoundException e) {
        throw new LoadFailedException(StringUtil.format(Strings.get("jarClassNotFoundError"), className));
    }
    if (!(Library.class.isAssignableFrom(retClass))) {
        throw new LoadFailedException(StringUtil.format(Strings.get("jarClassNotLibraryError"), className));
    }
    // instantiate library
    Library ret;
    try {
        ret = (Library) retClass.newInstance();
    } catch (Exception e) {
        throw new LoadFailedException(StringUtil.format(Strings.get("jarLibraryNotCreatedError"), className));
    }
    return ret;
}
Also used : ZipClassLoader(com.cburch.logisim.util.ZipClassLoader) Library(com.cburch.logisim.tools.Library) File(java.io.File) IOException(java.io.IOException)

Aggregations

Library (com.cburch.logisim.tools.Library)1 ZipClassLoader (com.cburch.logisim.util.ZipClassLoader)1 File (java.io.File)1 IOException (java.io.IOException)1