Java io catching exception

私はこのエラーが発生しています:

bill value:$ 0.10
bill value: $0.05
bill value: $0.01
bill value: $100.00
Exception in thread "main" java.io.EOFException
    at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    at ReadMoney.main(ReadMoney.java:12)

================== 私のコード:

//import java.util.Date;
public class ReadMoney
{
    public static void main(String argv[]) throws Exception
    {
        FileInputStream fis = new FileInputStream("money.out");
        ObjectInputStream ois = new ObjectInputStream(fis);
        Object read;
        try
        {
            while ((read = ois.readObject()) != null)
            {
                if (read instanceof Bill)
                {
                    System.out.println("bill value: " + read);
                }
                else if (read instanceof Quarter)
                {
                }// while
                else if (read instanceof Dime)
                {
                    System.out.println("bill value:" + read);
                }
                else if (read instanceof Nickel)
                {
                    System.out.println("bill value:" + read);
                }
                else if (read instanceof Penny)
                {
                    System.out.println("bill value:" + read);
                }
                else if (read instanceof Bill)
                {
                    System.out.println("bill value:" + read );
                }

            Money quarter = (Money) ois.readObject();
            System.out.println("Quarter: "+ quarter);
            System.out.println("Quarter: "+ quarter);
            Money dime = (Money) ois.readObject();
            System.out.println("Dime:" + dime);
            Money nickel = (Money)ois.readObject();
            System.out.println("Nickel:" + nickel);
            Money penny = (Money) ois.readObject();
            System.out.println("Penny:" + penny);
            Money bill = (Money) ois.readObject();
            System.out.println("Bill: " + bill);
        }// try
        } catch (IllegalBillException ibe)
        {
            System.out.println("End of file reached");
        }
        ois.close();
        fis.close();
    }// main
}// class

私はかなり私の試しとキャッチブロックが正しいことを確信していますが、私のプログラムは2四半期の値と何か奇妙な理由で "ファイルの終わりに達した"というテキストを表示していません。 = /

1
あなたのファイルの内容は何ですか?あなたの思うものが含まれていないようです。
追加された 著者 Tudor,

2 答え

あなたは IllegalBillException をキャッチしていますが、 EOFException (またはスーパークラス、 IOException )をキャッチしていません。

1
追加された
ああ、ありがとう!私は別のキャッチステートメントを逃していた!ありがとう!
追加された 著者 Nicholas Kong,

問題は、ヌルチェック付きのEOFをテストする while 条件は、 "}//try "の後のものを "保護"しないため、そのポイントの後に readObject を呼び出すと、EOFを超えて読み込みを試み、例外が発生します。

あなたは何とかあなたのロジックを再構成する必要があります。

EOFException をキャッチすると、例外は「去ってしまいますが、あなたのバグは修正されません。

0
追加された
ありがとうホットリックス!今修正されました! :)
追加された 著者 Nicholas Kong,