2012-02-12 3 views
0

클라이언트를 실행하고 값을 설정/가져 오기 필드에 액세스하려고합니다. 스크립트가 시작되면 URLClassLoader으로로드 된 클라이언트 클래스의 새 인스턴스를 만들고 gameApplet에 할당합니다.리플렉션이 적용된 NPE

이제 코드의 다음 조각 (정적 필드에 액세스) 잘 작동 :

Class<?> clientClass = clientClassLoader.loadClass("client"); 
fps = clientClass.getDeclaredField("fpsOn"); 
fps.setAccessible(true); 
fps.set(null, true); 

그러나이 후, '비 정적 필드에 액세스하려고 할 때 :

logged = clientClass.getField("loggedIn"); 
logged.set(gameApplet, true); 

나는이 얻을를 오류

java.lang.NullPointerException 
    at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(Unknown Source) 
    at sun.reflect.UnsafeBooleanFieldAccessorImpl.set(Unknown Source) 
    at java.lang.reflect.Field.set(Unknown Source) 
    at launch.run(launch.java:206) 
    at java.lang.Thread.run(Unknown Source) 

나는 그것이 null 인 인스턴스라고 가정하지만, 정적 필드를 얻는 이유는 무엇입니까?

+0

'OK'또는 'So'로 문장을 시작하지 마십시오. 만약 당신이 그러한 용어를 제거한다면, 문장은 모든 비트를 많은 의미로 만듭니다. –

답변

4

클래스의 '인스턴스'를 만드는 것처럼 보이지 않습니다. 클래스의 생성자를 호출 한 다음 필요한 경우 인스턴스를 사용해야합니다.

위의 코드는 클래스에서 액세스 할 수있는 정적 필드에 사용됩니다. 즉, 인스턴스가 필요하지 않습니다.

+0

어떻게해야합니까? 나는 내가 올바르게하고 있다고 생각한다. 나는 이것을 보여주지 않았다. – user1204813

+0

gameApplet = (Applet) clientClass.newInstance(); – user1204813

+0

@ user1204813 set (null, true)를 호출하면 예외가 발생합니다. 그래서 set을 호출 한 후 gameApplet을 할당 할 수 있습니까? –