Archief - [JAVA]

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Matt.

Legacy Member
Heb hier een probleempje, en vraag me af hoe ik dit correct kan oplossen. :)

Code:
    public static void main(String[] args){
        String invoer1 = lees();
        String invoer2 = lees();
        System.out.println(invoer1+" "+invoer2);
    }
    
    public static String lees() {
        
        String regel = null;
        try {
            InputStreamReader isr = new InputStreamReader(System.in);
            BufferedReader in = new BufferedReader(isr);
            regel = in.readLine();
            in.close();
        } catch (Exception e){
            System.out.println(e);
        }
        return regel;
    }

Krijg deze fout: java.io.IOException: Stream closed
Iemand enig idee? Zeg niet gewoon de in.close(); weglaten want dat werkt inderdaad, maar is volgens mij niet de correcte manier om dit op te lossen. :p

Thanks

KenSpectre

Legacy Member
Normaal moet ge na de catch een finally block zetten waarin ge de stream closed. (kwestie dat als ge een exception hebt ge een resource leak krijgt :) )

Of het het oplost weet ik nie zeker

Ollie

Legacy Member
matthi_182 zei:
Heb hier een probleempje, en vraag me af hoe ik dit correct kan oplossen. :)

Code:

Krijg deze fout: java.io.IOException: Stream closed
Iemand enig idee? Zeg niet gewoon de in.close(); weglaten want dat werkt inderdaad, maar is volgens mij niet de correcte manier om dit op te lossen. :p

Thanks

Hoe denk jij van de System.in te lezen nadat je hem geclosed hebt misschien?

Matt.

Legacy Member
Ge moet daarvoor serieus niet zo betweterig reageren ze. Ik weet amper wat ik doe. Kan daar ook ni aan doen da mijne cursus ni zo uitgebreid is en ik geen tijd heb om boeken van 100'en blz te lezen over de theoretische kant (hoewel ze ons daar beter wel de tijd voor zouden geven).

Hoe los ik dit dan op? Uiteindelijk moet ge uw stream toch closen..? Bestaat er een manier om die System.in dan weer te "initialiseren"?

KenSpectre

Legacy Member
matthi_182 zei:
Ge moet daarvoor serieus niet zo betweterig reageren ze. Ik weet amper wat ik doe. Kan daar ook ni aan doen da mijne cursus ni zo uitgebreid is en ik geen tijd heb om boeken van 100'en blz te lezen over de theoretische kant (hoewel ze ons daar beter wel de tijd voor zouden geven).

Hoe los ik dit dan op? Uiteindelijk moet ge uw stream toch closen..? Bestaat er een manier om die System.in dan weer te "initialiseren"?

Als het op mij bedoeld was: Was echt mijn bedoeling niet om betweterig over te komen hoor :$

Ik zat eig met files lezen in mn hoofd maar ik zie dat jij gewoon input vraagt aan een user?
Kunt ge ook met scanner werken:

Code:
Scanner input = new Scanner(System.in);

int number1;
number1 = input.nextInt();
En een system.in moet ge normaal niet closen (dacht ik)

forloRn_

Legacy Member
Je hebt die InputStream toch zelf niet geopend? Je hebt de bestaande InputStream System.in meegegeven aan een hoop Readers ja, maar dan ga je die toch zelf niet sluiten?

En nog een gratis tip: 't is not done om een exception gewoon te negeren. Je krijgt hier een IOException, je logt iets en voor de rest doe je gewoon alsof er niets gebeurd is: je print gewoon null af. Aangezien in.readLine() ook null kan teruggeven weet je hier niet of je stream beëindigd is, of dat er iets is misgelopen.

Voor dit eenvoudige voorbeeldje is dit beter:
Code:
public static String lees() throws IOException {
  BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  return in.readLine();
}

Ofwel laat je main() dan ook een IOException throwen, ofwel catch je ze in main() en print je een foutboodschap.

Matt.

Legacy Member
KenSpectre zei:
Als het op mij bedoeld was: Was echt mijn bedoeling niet om betweterig over te komen hoor :$

Ik zat eig met files lezen in mn hoofd maar ik zie dat jij gewoon input vraagt aan een user?
Kunt ge ook met scanner werken:

Code:
Scanner input = new Scanner(System.in);

int number1;
number1 = input.nextInt();
En een system.in moet ge normaal niet closen (dacht ik)

't Was niet op u, gij gaf tenminste een mogelijke oplossing. ;)
Soit, gewoon niet closen dus.

Thanks all. (Ook voor de overige info!)

djbramz

Legacy Member
En anders als je files probeert in te lezen gewoon closen in een finally statement, zo wordt er ook gesloten als er iets fout gaat.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan