0

我正在尝试将文件“TutorialMap”用作本教程任务中的地图。我一直被告知 MapReader“阅读器”需要是静态的,但是当它是静态的时,我被告知“未处理的异常类型 FileNotFoundException”,阅读器的构造函数出现错误。

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();

谢谢你的时间。

4

3 回答 3

0

用 try catch 块包围抛出“未处理的异常类型 FileNotFoundException”的代码。你得到这个异常是因为它是一个检查异常,你被迫处理这个。我建议使用 Eclipse 之类的 IDE(如果您还没有使用它),这对开发非常有帮助。

try {
        reader = new MapReader("TutorialMap");
    } catch(FileNotFoundException e) {
        throw new RunTimeException(e);
    }
于 2013-05-27T13:37:36.737 回答
0

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

static MapReader reader = null;

static Territory[][] missionMap = null;

static {  
   try { 

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

  }
于 2013-05-27T13:39:53.953 回答
0

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

当您将其标记为静态编译器时,编译器会继续前进并看到您没有捕获构造函数抛出的异常TutorialMission

由于我不明白您真正想做什么,我只能建议您:

如果您希望所有这些东西都是静态初始化阅读器到静态初始化程序并捕获异常:

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

您的已检查异常现在由未经检查的异常包装。

或者(如果您真的不想将这些数据保存在静态变量中,只需删除静态修饰符并在构造函数中执行初始化:

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

现在调用者负责在此处创建和传递reader.

于 2013-05-27T13:46:23.143 回答