Search code examples
javafilerobocode

File writing in Robocode (Java)


Basically, I am trying to generate a log file in Robocode, but I am having issues as you cannot use try/catch in Robocode (as far as I am aware). I have done the following:

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

and

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

and am getting the following error at compile time:-

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

Solution

  • As you can see here, the interface doesn't declare any checked exceptions. So you can't throw one in your implementing class.

    One way to solve this would be to implement your method like this:

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