3

基本上,我正在尝试在 Robocode 中生成一个日志文件,但我遇到了问题,因为您不能在 Robocode 中使用 try/catch(据我所知)。我做了以下事情:

public void onBattleEnded(BattleEndedEvent e) throws IOException
{
    writeToLog();
    throw new IOException();
}

public void writeToLog() throws IOException
{
    //Create a new RobocodeFileWriter.
    RobocodeFileWriter fileWriter = new RobocodeFileWriter("./logs/test.txt");
    for (String line : outputLog)
    {
        fileWriter.write(line);
        fileWriter.write(System.getProperty("line.seperator"));
    }
    throw new IOException();
}

并在编译时收到以下错误:-

MyRobot.java:123: onBattleEnded(robocode.BattleEndedEvent) in ma001jh.MyRobot cannot implement onBattleEnded(robocode.BattleEndedEvent) in robocode.robotinterfaces.IBasicEvents2; overridden method does not throw java.io.IOException
    public void onBattleEnded(BattleEndedEvent e) throws IOException
                ^
1 error
4

2 回答 2

2

正如您在此处看到的,该接口没有声明任何已检查的异常。所以你不能在你的实现类中扔一个。

解决此问题的一种方法是像这样实现您的方法:

public void onBattleEnded(BattleEndedEvent e)
{
    writeToLog();   
    throw new RuntimeException(new IOException());
}

public void writeToLog()
{
    //Create a new RobocodeFileWriter.      
    RobocodeFileWriter fileWriter = new RobocodeFileWriter("./logs/test.txt");
    for (String line : outputLog)
    {
        fileWriter.write(line);
        fileWriter.write(System.getProperty("line.seperator"));
    }       
    throw new new RuntimeException(new IOException());
}
于 2011-03-05T14:17:58.733 回答
1

但我遇到了问题,因为您不能在 Robocode 中使用 try/catch(据我所知)

这个假设是从哪里来的?我只是因为你的问题在这里安装了robocode(所以如果我以后不经常在这里回答,那是你的错),写了我自己的机器人,它可以很好地捕获异常:

try {
   int i = 1/0;
}
catch(ArithmeticException ex) {
   ex.printStackTrace();
}

为什么在你的例子中抛出 IOExceptions?

于 2011-03-06T02:53:09.740 回答