Name: ksC84122 Date: 03/19/99 java.lang.Class.newInstance() throws IllegalAccessError if this class has an inner not public class. !!! The following test should have MyClass1.class in the current directory file compiled from MyClass1.java file(see below): ===== test42.java ======== public class test42 { public static void main (String argv[]) { TestLdr tl = new TestLdr(); // custom ClassLoader Class cl = null; try { cl = tl.findClass("MyClass1"); cl.newInstance(); System.out.println("PASSED"); return; } catch (Throwable e) { e.printStackTrace(); System.out.println("FAILED: Unexpected " + e); return; } } } class MyClassLoader extends ClassLoader {} class TestLdr extends ClassLoader { private String testdirurl = null; protected Class findClass(String name) throws ClassNotFoundException { byte[] data; try { java.io.InputStream in = new java.io.FileInputStream(name + ".class"); java.io.ByteArrayOutputStream buf=new java.io.ByteArrayOutputStream(); while (true) { int d=in.read(); if (d==-1) break; buf.write(d); } in.close(); data=buf.toByteArray(); } catch(java.net.MalformedURLException e) { throw new ClassNotFoundException(e.toString()); } catch(java.io.IOException e) { throw new RuntimeException(e.toString()); } return defineClass(null, data, 0, data.length); } } ===== MyClass1.java ======== public class MyClass1 { public MyClass1() { new Inner(); } class Inner {} } ========= Sample run (JDK1.2.2) ========== #>java test42 java.lang.IllegalAccessError: try to access class MyClass1$Inner from class MyClass1 at java.lang.Class.newInstance0(Native Method) at java.lang.Class.newInstance(Class.java, Compiled Code) at test42.main(test42.java, Compiled Code) FAILED: Unexpected java.lang.IllegalAccessError: try to access class MyClass1$Inner from class MyClass1 ======================================================================
|