[ Stijak @ 25.10.2011. 15:07 ] @
Rešavao sam neki početnički problem iz oracle java turorijala - drugi problem na http://download.oracle.com/jav...ential/io/QandE/questions.html Prvi problem na koji sam naišao je da mi eclipse (Helios - instalirao sam stariju verziju zbog dodatka za android) nije prepoznavao try with resource statement kao što je u rešenju na http://download.oracle.com/jav...ssential/io/QandE/FindInt.java tj. prijavljivao expected { found (... Pretpostavio sam da je to zato što je Eclipse malo stariji ne razume Try with resources koji je valda novi u 1.7, pa sam na silu pokrenuo - izabrao proceed u Eclipse i java mi je prijavila istu grešku... 1. Prvo pitanje - Šta je pogrešno sa try with resources na http://download.oracle.com/jav...ssential/io/QandE/FindInt.java ? Devinitivno imam java JDK 1.7 instaliranu i podešenu u Eclipse jer sam bez problema radio već sa nekim klasama java.nio paketa koji je novi u javi 1.7... Posle toga sam odlučio da odustanem od try with resources i riješim na stari način - preko finally bloka - kao u kopiranom kodu (ime klase ne odgovara problemu jer nisam htio praviti novi projekat samo za ovaj zadačić) - i sad mi u finally bloku prijavljuje grešku da mi je promjenljiva fc nedefinisana (a definisana je u try bloku)? Ne razimijem? Zar nije poenta finally bloka da počisti poslije try bloka i onda mi je logično da sve što je definisano u try - pa makar tu bilo i lokalno da je definisano i u finally? 2. Šta je problem sa mojom nedefinisanom fc promjenljivom u finally bloku? Ako ne mogu koristiti lokalne promjenljive iz try bloka - kako onda drugačije da zatvorim fc preko finally bloka? Napomena - uspio sam pokrenuti program kada sam ovaj blok iz finally pomjerio u try (nisam mogao kopirati ni u catch blok jer mi je prijavljivao isti problem)... Code: import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.nio.*; import java.nio.channels.SeekableByteChannel; import java.nio.file.*; class CountLetters { private Path file; CountLetters (Path file) { this.file = file; } public int seek() throws IOException { int lookingFor = -1; try { SeekableByteChannel fc = Files.newByteChannel(file); ByteBuffer buf = ByteBuffer.allocate(8); //Get the offset into the file. fc.read(buf); long offset = buf.getLong(0); //Seek to the offset location. fc.position(offset); buf.rewind(); //Read the 'secret' value. fc.read(buf); lookingFor = buf.getInt(0); } catch (IOException x) { System.err.println(x); } finally { if (fc != null) fc.close(); } return lookingFor; } public static void main(String[] args) throws IOException { Path file = Paths.get("datafile"); int lookingFor = new CountLetters(file).seek(); System.out.println("The value is " + lookingFor); } } |