2013-05-27 50 views
0

我试图在本TutorialMission中使用用作映射的文件“TutorialMap”。我总是被告知MapReader“reader”需要是静态的,但是当它是静态的时候,我会被告知“未处理的异常类型FileNotFoundException”,并在reader的构造函数中出现错误。对象构造函数的Java未处理文件类型

static MapReader reader = new MapReader("TutorialMap"); 

static Territory[][] missionMap = reader.getMap(); 

public TutorialMission() throws FileNotFoundException { 

    super(missionMap, Size, AircraftCarrierID, AircraftCarrierID); 

} 

超类的构造函数:

public class MissionIF extends Map { 
public MissionIF(Territory[][] load, String size, int StartingMoney, int powerLevel) 
{ 
    // Set money per mission. 
    super(); 

感谢您的时间。

+0

你的超类的构造函数正在启动这个异常,请张贴代码 – fmodos

+0

什么是TutorialMap?它是一个文件吗?如果是,那么它必须有一个像TutorialMap.txt或TutorialMap.dat这样的扩展名。成为'FileNotFoundException'的原因。 –

+0

错误是你nderlining读者声明,包装“新的MapReader(”TutorialMap.txt“)” – user1933516

回答

0

我不知道为什么它必须是静态的,但由于构造函数抛出检查异常,它在调用的地方进行处理。因此做这样的事情:

static MapReader reader = null; 

static Territory[][] missionMap = null; 

static { 
    try { 

     reader = new MapReader("TutorialMap"); 
    } catch(FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    missionMap = reader.getMap(); 

    } 
+0

这摆脱了我在问题中提到的错误。我不知道你可以创造一个静态的领域。 – user1933516

+0

我很高兴它帮助:) –

0

围绕着使用try catch块抛出“未处理的异常类型FileNotFoundException”的代码。你正在得到这个异常,因为它的检查异常,你被迫处理这个异常。我会建议使用像eclipse这样的IDE(如果你没有使用它),这对开发很有帮助。

try { 
     reader = new MapReader("TutorialMap"); 
    } catch(FileNotFoundException e) { 
     throw new RunTimeException(e); 
    } 
+0

我正在使用Eclipse,它向我显示错误。当我尝试配置try catch块时,在任何尝试,捕获或包含的{}行上出现错误。 – user1933516

+0

看到我更新的帖子 –

0

编译器需要您reader是静态的,因为你初始化其他静态变量missionMap时调用它。

当你将它标记为静态编译器前进时,发现你没有捕获到构造函数TutorialMission抛出的异常。

因为我不明白你真正想做的事情我只能建议你:

如果你想所有这些东西是静态初始化读者进入静态初始化和捕获异常:

static MapReader reader; 
static { 
    try { 
     reader = new MapReader("TutorialMap"); 
    } catch(FileNotFoundException e) { 
     throw new IllegalArgumentException(e); 
    } 
} 

您检查的异常现在由未选中的异常包装。

或者(如果你真的不希望持有静态变量这个数据只是删除static修饰符,并在构造函数中执行initalization:

public TutorialMission(MapReader reader, Territory[][] missionMap) throws FileNotFoundException { 
    super(missionMap, Size, AircraftCarrierID, AircraftCarrierID); 
    missionMap = reader.getMap(); 
} 

现在调用者负责创建和路过此地的reader

+0

我试过这样做,但变量必须在它命中超级语句之前为空,并且超级语句必须是构造函数方法中的第一件事。 – user1933516