0

ここでJavaを勉強する男。学校で課題があり、簡単な GUI を使って小さなスター ウォーズ ゲームを作成しました。SaveToFile()メソッドとReadFromFile()メソッドで、メソッドが例外をスローします。これで問題ありません。すべてが機能します。

しかし、割り当てには、「一部のメソッドは例外をスローする可能性があります。これらは合理的に処理する必要があります。」これが何を意味するのか分かりません。コードの重複を回避しようとすることと関係があるようです。ヒントはありますか?再利用できるエラーのメソッドを作成することですか?

これが私のコードです:

private void readFromFile()
{
    try{
        gui.makeInVisible();
        FileInputStream fis = new FileInputStream("Savegame.obj");
        ObjectInputStream ois = new ObjectInputStream(fis);

        Battleground battleground = (Battleground) ois.readObject();
        GUI gui = new GUI(battleground);
        BattleController bc = new BattleController(gui, battleground);
        ois.close();
    }
    catch (IOException e) {
        gui.updateActionField("Something went wrong... Did you delete the file Savegame.obj while playing?");
        e.printStackTrace();
    }
    catch (ClassNotFoundException f) {
        System.out.println("Woops. This game looks broken! Did you delete the whole battleground class?");
    }
}
private void saveToFile() {
    try{
        // Serialize data object to a file
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Savegame.obj"));
        out.writeObject(battleground);
        Serialize data object to a byte array
        ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
        out = new ObjectOutputStream(bos) ;
        out.close();

        // Get the bytes of the serialized object
        byte[] buf = bos.toByteArray();
    } catch (IOException e) {
        gui.updateActionField("Something went wrong with saving the file. And we really don´t know what I am afraid!");
    }
}

ありがとう。

4

5 に答える 5

3

学校の課題のために「例外の合理的な処理」を既に行っていると思いますが、出力ストリームを閉じる最終ブロックを追加する必要があります。ここで例外が発生した場合、ストリームは閉じられません。

于 2013-05-16T10:44:30.137 に答える
2

SaveToFileたとえば、ファイルが見つからない場合は sReadFromFileをスローする可能性がExceptionあります。割り当てが求めているのは、これらの例外が発生した場合にプログラムを伝播させて中断させないことです。

技術的な観点でこれが意味することは、次のようなことを行う必要があるということです (これがあなたReadFromFileの .

try {
    String sCurrentLine;
    BufferedReader br = new BufferedReader(new FileReader(pathToFile));
    while ((sCurrentLine = br.readLine()) != null) {
    System.out.println(sCurrentLine);
    }
} catch (IOException e) {
    // here you should handle the IOException, maybe you want
    // to notify the user, or probably exit the program with 
    // a log in the console or whatever else
} 

一般的に言えば、Exceptions を伝播させるのは良い考えではありません。コード内でそれらを処理できるポイントに到達したら、すぐにそれらを処理する必要があります。コードを知らなくても、ファイルから読み取り、すぐにユーザーに通知するメソッドですぐにそれを行う必要があると思います。

@cHao がコメントで示唆したように、ユーザーに通知する責任を与えることは適切な解決策ではReadFromFileありません。コードをどのように構造化したかによってはException、より広いアプリケーションの理解、何をするかを選択できます。

于 2013-05-16T10:23:21.213 に答える
1

コードで例外を使用する場合は、関数を使用する場所でも例外を処理する必要があります。例外を処理または処理するたびに、例外をログに記録したり、出力したりできます...しかし、処理自体はすべての状況に非常に固有です。

「すべての例外に対するマジック コード」はありません。それぞれの状況で回復し、それに応じて行動するのはあなたの仕事です。

ネットには、次のような正しい例外処理に関するチュートリアルがたくさんあります: http://www.tutorialspoint.com/java/java_exceptions.htm

また、例外を処理せずに例外を起動する可能性のある関数を呼び出さないでください。これにより、プログラムがクラッシュする可能性があります。

于 2013-05-16T10:23:12.990 に答える
0

Java http://docs.oracle.com/javase/tutorial/essential/exceptions/で例外処理を調べることができます

例外の種類、処理する必要があるものと処理しないもの、および例外/エラーを処理するさまざまな方法を理解できるでしょう。

おそらくあなたの場合、例外をキャッチしてカスタム例外をスローするか、より適切なコメント/ログを表示する必要があります。

于 2013-05-16T10:23:37.807 に答える
0

File Input/Output からスローされた例外をキャッチし、接続を閉じるなど、コードをクリーンアップする必要があります。ユーザーにエラーメッセージを表示するのも良いことです。

それは私が「合理的」と呼ぶものです

于 2013-05-16T10:23:41.523 に答える