Name: rlT66838 Date: 05/11/2000
Classic VM (build JDK-1.2.2-001, native threads, symcjit)
/*
URLClassLoader.getResource() FAIL on .jar file (return null with .jar file)
JDK 1.2.2-001 (Windows98 and Linux), jdk 1.3 Windows
1. Put this file into some work directory (for example y)
2. Create file 'x' in the same directory (y)
3. Compile
javac -classpath . URLClassLoader.java
4. Run test from directory
java -cp . URLClassLoader
RESULT OK (resource 'x' founded):
Resource 'x' by Class ClassLoader:file:/E:/y/x
Class file by Class ClassLoader:file:/E:/y/URLClassLoaderTest.class
URLClassLoader URL: file:/E:/y/
Resource 'x' by URLClassLoader:file:/E:/y/x
Class file by URLClassLoader:file:/E:/y/URLClassLoaderTest.class
5. Pack files 'URLClassLoader.class' and 'x' into jar
jar cvf url.jar URLClassLoader.class x
6. Run test from within jar file
java -cp url.jar URLClassLoader
RESULT BAD (resource 'x' not found)
Resource 'x' by Class ClassLoader:null
Class file by Class
ClassLoader:jar:file:/E:/y/url.jar!/URLClassLoaderTest.class
URLClassLoader URL: file:/E:/y/url.jar!/
Resource 'x' by URLClassLoader:null
Class file by URLClassLoader:jar:file:/E:/y/url.jar!/URLClassLoaderTest.class
WHAT IS WRONG ??
*/
import java.net.*;
public class URLClassLoaderTest
{
public static void main(String[] args)
{
URLClassLoaderTest test = new URLClassLoaderTest();
// reference class (point to resources)
Class where = test.getClass();
URL u = where.getResource("x"); // OK with local filesystem, null with .jar
URL [] url = {where.getResource("URLClassLoaderTest.class")};
System.out.println("Resource 'x' by Class ClassLoader:" + u);
System.out.println("Class file by Class ClassLoader:" + url[0]);
String s = url[0].getFile();
int k = s.lastIndexOf("/");
s = s.substring(0, k + 1);
try {
url[0] = new URL(url[0], s);
// Now url[0] point to directory with class file (and 'x' file)
} catch (Exception e) {
System.out.println(e);
}
System.out.println("URLClassLoader URL: " + url[0]);
// create ClassLoader
URLClassLoader ucl = new URLClassLoader(url);
u = ucl.getResource("x"); // OK with local filesystem, null with .jar file
System.out.println("Resource 'x' by URLClassLoader:" + u);
u = ucl.getResource("URLClassLoaderTest.class");
System.out.println("Class file by URLClassLoader:" + u);
}
}
(Review ID: 104729)
======================================================================