Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Tulostus, jos palvelin ei vastaa

Sivun loppuun

Polarbear [10.07.2016 21:59:05]

#

Miten javalla voi katsoa hasnext metodilla, että onko--> BufferedReader reader null vai ei? Siis jos on null niin suoritus loppuu ja tulostaa vaikka jotain

Mod. laittoi oikeaa ongelmaa kuvaavan otsikon, ks. myöhempi keskustelu!

groovyb [11.07.2016 00:03:00]

#

HasNext on Scannerin metodi (dokumentaation mukaan, en javaa kirjoittele joten päättelin lukemastani). jos haluat käyttää BufferedReaderia tiedoston lukuun, tee se jotenkin seuraavasti:

FileReader fileReader = new FileReader(new File("test.txt"));
BufferedReader br = new BufferedReader(fileReader);

String line = null;
// if no more lines the readLine() returns null
while ((line = br.readLine()) != null) {
     // reading lines until the end of the file
     System.out.println(line);
}

Polarbear [11.07.2016 15:11:38]

#

Ongelma tässä on se, että jos reader on null niin ohjelman kontrooli/suoritus keskeytyy. Toisin sanoen minun pitää saada niin, että jos reader on null->tehdään jotain ja muutoin tulostaa line mikä onkin jo tuossa.

Jos reader on null ja laitan if lauseen niin suoritus ei pääse sinne asti?

BufferedReader reader;
            try (OutputStreamWriter writer = new OutputStreamWriter(connection.getOutputStream())) {
                writer.write("xxxxxxxx");
                writer.flush();
                 reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                 String line;
                while ((line = reader.readLine()) != null)
               {
                   System.out.println(line);
               }

Metabolix [11.07.2016 15:25:03]

#

Ei ole mahdollista, että koodissasi reader olisi null sijoitusrivin jälkeen, koska new-operaattori palauttaa aina varmasti olion (ellei heitä poikkeusta). Eli selvitäpä uudestaan, mikä on ongelma tai millainen virheilmoitus tulee.

Jos kuitenkin haluat jossain tuollaisen tarkistaa, siihen sopii oikein hyvin if-lause:

if (reader == null) {
  System.out.println("reader == null!");
  return; // System.exit(1), throw, mitä vain.
}

Polarbear [11.07.2016 19:34:15]

#

Eli minulla on koodinpätkä, joka parsiin responsen serveriltä. Nyt pitää valioida niin, että mikä on jotain mitä parsia niin tulostetaan sisältö. Mikäli parsittavaa ei ole niin tulostetaan vaikka jotain?

groovyb [12.07.2016 02:20:33]

#

Mikä on tilanne, missä response voi olla null? Palvelin palauttaa aina jotain.

Grez [12.07.2016 09:34:32]

#

Ei palvelin aina palauta jotain. Voihan se vaikka seota kesken pyynnön käsittelyn. Ja sen lisäksi että palvelimella voi olla vikatilanne, voi verkossa olla ongelma, niin että vastaus ei tule perille asti.

Yleisesti ottaen näissä tilanteissa Javassa toki tulee poikkeus...

Polarbear [12.07.2016 14:57:19]

#

Toisin sanoen ohjelma pollaa 30 sec ja ellei responsea tule niin tulostaa vaikka morjens. Muuten ohjelma jää pollaamaan ikuisiksi ajoiksi :)?

Metabolix [13.07.2016 21:03:52]

#

Toivomasi ratkaisu ei liity BufferedReaderiin mitenkään. Voit laittaa nettisivun lataukselle aikakatkaisun (URLConnection-luokan setConnectTimeout ja setReadTimeout), jolloin aikarajan täyttyessä saat SocketTimeoutException-poikkeuksen, jonka voit ottaa kiinni normaaliin tapaan catch-lohkolla.

try {
  // URL -> aikarajat, yhdistäminen, lukeminen jne.
} catch (SocketTimeoutException e) {
  System.out.println("Aikaraja ylittyi!");
}

Jos on tilanne, jossa yhteys ja lukeminen ”onnistuvat” mutta dataa ei tule, voit lisätä itse lukusilmukkaan vaikka int-muuttujan, jolla lasket luetut rivit, ja silmukan jälkeen voit tarkastaa, jäikö muuttuja nollaan.

Behemot [16.07.2016 18:28:21]

#

thx


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta