Witam
Mam problem z pojawiajcym sie wyjatkiem java IOException: Stream closed.Nie za bardzo kumam dlaczego wyskakuje informacja ze strumien jest zamkniety skoro jest uzywana wersja try automatycznie zarzadzajaca zasobami.Czyli close() nastepuje w automacie
import java.io.*;
class BudgClass{
String nameFile;
byte choice=0;
BudgClass(String strN){
nameFile = strN;
}
void showMenu(){
System.out.println("\t ==>> Witaj w programie <<== ");
System.out.println("\t Wybierz z posrod dostepnych opcji\n");
System.out.println("1. Dodaj ");
System.out.println("2. Pokaz");
System.out.println("3. Zakoncz program ");
}
byte choice(){
byte bt;
String str;
int x;
try(BufferedReader bf=new BufferedReader(new InputStreamReader(System.in)))
{
do{
bt=0;
System.out.print("Twoj wybor: ");
str = bf.readLine();
try{
choice = Byte.parseByte(str);
}catch(NumberFormatException exc){
System.out.println("Niepoprawny format");
bt=-1;
}
if(bt!=-1){
if(choice >=1 && choice <=3) bt=1;
else System.out.println("Brak funkcji.Sprobuj pnownie \n");
}
}while(bt!=1);
}catch(IOException exc){
System.out.println("Wystapil blad wejscia konsoli");
return -1;
}
return choice;
}
void addInfo(){
System.out.println("\t ==>> Witaj w programie <<== ");
String month,info;
double expense,sum;
String str;
info="TAK";
try (FileWriter fw = new FileWriter(nameFile,true);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)))
{
do{
System.out.print("\nPodaj nazwe miesiaca: ");
month=br.readLine();
month="\n*"+month+"\r\n";
fw.write(month);
sum=0;
do{
System.out.print("Podaj kolejny element: ");
info=br.readLine();
info="\t+"+info+"\t";
fw.write(info);
do{
System.out.print("Podaj kwote: ");
info=br.readLine();
expense=-1;
try{
expense=Double.parseDouble(info);
sum+= expense;
}catch(NumberFormatException exc){
System.out.println("Niepoprawny format kwoty.Uzyj kropki jako znaku rozdzielajacego");
}
}while(expense== -1);
info="\t"+ info+"\r\n";
fw.write(info);
System.out.print("Czy chcesz dodac kolejny element? TAK/NIE ");
info=br.readLine();
}while(info.equals("TAK"));
System.out.println("Suma : "+sum);
fw.write("\t\t\t\t Suma: "+sum);
System.out.print("Kolejny miesiac? TAK/NIE ");
info=br.readLine();
}while(info.compareTo("TAK")==0);
System.out.println("\n**Wyjscie do MENU glownego**");
} catch(IOException exc){
System.out.println("Wystapil blad wejscia - wyjscia "+exc);
}
}
}
class Budget{
public static void main(String args[])
throws IOException{
BudgClass bc = new BudgClass("plik.txt");
byte nr;
bc.showMenu();
nr= bc.choice();
switch(nr){
case 1:
bc.addInfo();
break;
case 2:
break;
case 3:
break;
default:
System.out.println("## Zamykanie programu ##");
}
}
}
W metodzie choice() pobieram informacje od uzytkownika w zakresie wyboru konkretnej opcji natomiast w metodzie addInfo() zostaja wczytane informacje z konsoli i zapisywane do pliku.Sprawdzilem juz wywolujac jedna metode bez drugiej jest ok na odwrot tez ok.Jak rozumiem problem jest ze stworzonym strumieniem System.in opakowanym klasa BufferedReader. Oczywiscie program sie dopiero tworzy wiec to wstep.Natomiast nie za bardzo rozumiem dlaczego jest blad.Dokonalem zamiany i jawnie zamknalem jeden i drugi strumien i tak lipa wiec jakby ktos mi podrzucil jakas wskazowke gdzie lezy blad w moim mysleniu
Pzdr