2011-12-18 5 views
1

Я получаю эту ошибку:ява И.О. ловить исключение

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 

I Я уверен, что моя попытка и блок catch верны, но моя программа не печатает значение 2 четверти, а также текст, говорящий «конец файла, достигнутого» по какой-то нечетной причине. =/

+0

Какое содержимое вашего файла? Похоже, что он не содержит того, что вы думаете, что он делает. – Tudor

ответ

1

Вы ловите IllegalBillException (что бы это ни было), но вы не ловите EOFException (или это суперкласс, IOException).

+0

О, я вижу Спасибо! Мне не хватало других заявлений об уловах! Спасибо, ребята! –

0

Проблема заключается в том, что ваше while условия, которое проверяет для EOF с нулевым чеком, не «защитить» вещи после того, как «}// try», и, следовательно, readObject вызовов после этого момента будут пытаться читать дальше EOF и получить исключение.

Вам нужно как-то реструктурировать свою логику.

Ловля EOFException сделает исключение «уйти», но не исправит вашу ошибку.

+0

Спасибо, Горячие Лики! Теперь это исправлено! :) –

Смежные вопросы