2013-08-25 2 views
0

Basicly 난 내 주요 모드 클래스의 문자열에서 "World.class"에서 연주지도의 이름을 얻으려면에서... 추상 클래스

public abstract class World implements IBlockAccess{ 
    protected WorldInfo worldInfo; 
    //=====OtherStuff===== 
    public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings, WorldProvider par4WorldProvider, Profiler par5Profiler, ILogAgent par6ILogAgent) 
     { 
     this.worldInfo.setWorldName(par2Str); 
     } 
    //=====OtherStuff===== 
} 

난을 변수를 가져옵니다 이 하나

public class World_Spy extends World{ 

    public World_Spy(ISaveHandler par1iSaveHandler, String par2Str, 
      WorldProvider par3WorldProvider, WorldSettings par4WorldSettings, 
      Profiler par5Profiler, ILogAgent par6iLogAgent) { 
     super(par1iSaveHandler, par2Str, par3WorldProvider, par4WorldSettings, 
       par5Profiler, par6iLogAgent); 
    } 

    @Override 
    protected IChunkProvider createChunkProvider() { 
     return null; 
    } 

    @Override 
    public Entity getEntityByID(int i) { 
     return null; 
    } 


    String TheName = ""; 
    public void gotIt(){ 
     TheName = this.worldInfo.getWorldName(); 
     System.out.println(TheName); 
    } 

} 

와 같은 패키지에있는 클래스를 생성하고 난 내 메인 클래스에서 호출 :

World_Spy WName = new World_Spy(null, null, null, null, null, null); 

있지만 chrashes 시작시 ... 어떤 아이디어? 당신이 차례로 상위 클래스의 생성자를 호출 World_Spy를 인스턴스화 할 때

+0

'implements IBlockAccess' - LOL. 이걸 사랑해야 해! –

답변

0

가 당신은 worldInfo

protected WorldInfo worldInfo; // initialization MISSING! 

그래서 initalized하지 않은 World() 당신은

this.worldInfo.setWorldName(par2Str); // NullPointerException here 

단순히 문제를 해결하려면 NullPointerException 얻을 인스턴스를 제공하십시오

protected WorldInfo worldInfo = new WorldInfo(); 
0

는 여기 NullPointerException을 던지는 "충돌"믿을 :

this.worldInfo.setWorldName(par2Str);

당신은 그것의 방법 setWorldName()를 호출하려고에 의해 worldInfo가 초기화되지 않았다 실제로 변수입니다. 변수가 이므로이 시점에서 NullPointerException을 던지고 합리적입니다.

java에서 (필자가 알고있는 다른 모든 프로그래밍 언어와 똑같은) 변수를 사용하기 전에 변수를 초기화해야합니다. 실제로 기본 유형은 일종의 "정상"값을 사용하여 기본적으로 초기화됩니다. 그러나 사용자 정의 유형의 변수는 초보자를 혼동시킬 수있는 null으로 초기화됩니다.

는 생성자의 호출에 의해 다음 new 키워드를 사용할 필요가 초기화 :

worldInfo = new WorldInfo();

지금 당신은 세터와 worldInfo의 다른 방법을 호출 할 수 있습니다.

1

세계는 정적 클래스가 아닙니다 ... 이름을 얻으려면 세계 호환 객체의 인스턴스가 필요합니다. 그 이름을 세계의 인스턴스를 얻을 수있는 한 가지 방법 :

World world = Minecraft.getMinecraft().isIntegratedServerRunning() ? mc.getIntegratedServer().worldServerForDimension(Minecraft.getMinecraft().thePlayer.dimension) : Minecraft.getMinecraft().theWorld; 
String worldName = world.getWorldInfo().getWorldName(); 

이 코드는 클라이언트 측 작동합니다.