2011-03-05 77 views
1

基本上,我試圖在Robocode中生成一個日誌文件,但我遇到了問題,因爲您無法在Robocode中使用try/catch(據我所知)。我也做了以下內容:在Robocode(Java)中編寫文件

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 
+0

我也想看看界面。你是否只導入了'java.io.IOException'而不是別的? – adarshr 2011-03-05 14:15:58

+0

是的,我只輸入那個。 – 2011-03-05 14:21:20

回答

1

正如你可以看到here,接口不聲明任何檢查的異常。所以你不能在你的實現類中拋出一個。要解決這個

一個辦法是實施這樣的方法:

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

請參閱其中的問題;如果我把它拿走,編譯器會給出一個錯誤,說明基本上必須捕獲或聲明異常。 – 2011-03-05 14:22:16

+0

然後聲明爲'拋出RuntimeException' – adarshr 2011-03-05 14:23:48

+0

謝謝你,因爲你可能會告訴我,我相對較新的Java,並且對異常處理非常新。無論如何,所以我聲明爲「拋出RuntimeException」,編譯器仍然希望我捕獲或聲明IOException。我試圖使用'拋出新的RuntimeException',但那不行。謝謝。 – 2011-03-05 14:39:13

1

,但我有問題,因爲你不能在Robocode的使用try/catch語句(據我所知)

這個假設從何而來?我是你的問題在這裏安裝的robocode只是因爲(所以它是你的錯,如果我會回答這裏不常在未來的),寫我自己的機器人,它可以捕獲異常相當不錯:

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

而且你爲什麼扔IOException在你的例子?

+0

是的,很抱歉,我對與robocode有關異常處理方面的限制有些混淆。我試圖將其作爲試用/錯誤場景的一部分。畢竟我是一名新的CS學生,必須犯錯誤。 – 2011-03-13 15:16:41