public class PrivateAccessTest {
public static void main(String[] args) throws Exception {
Container container = createTestContainer();
if (container.getLayout() instanceof BorderLayout) {
BorderLayout layout = (BorderLayout)container.getLayout();
Component center = getChild(layout, BorderLayout.CENTER);
System.out.println("Center component = " + center);
}
...
}
public static Component getChild(BorderLayout layout, String key) throws Exception {
Class[] paramTypes = new Class[]{String.class, boolean.class};
Method method = layout.getClass().getDeclaredMethod("getChild", paramTypes);
// Private methods are not accessible by default
method.setAccessible(true);
Object[] params = new Object[] {key, new Boolean(true)};
Object result = method.invoke(layout, params);
return (Component)result;
}
...
}
C:\Projects\CovertJava\distrib\bin>private_access_test.bat
Testing private access
Center component = javax.swing.JSplitPane[,0,0,0x0,...]
java.security.AccessControlException: access denied
(java.lang.RuntimePermission accessDeclaredMembers)
grant {
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
};
set CLASSPATH=..\lib\chat.jar
set JAVA_ARGS=%JAVA_ARGS% -Djava.security.manager
set JAVA_ARGS=%JAVA_ARGS% -Djava.security.policy=../conf/java.policy
java %JAVA_ARGS% covertjava.visibility.PrivateAccessTest