2017-05-30 11 views
0

私はまだJavaへかなり新しいですし、私はReadableByteChannelを作ってるとき「のウェブサイトは解決できない」そうだ、なぜ私は思ったんだけど:Javaで「解決できません」というエラーが表示されるのはなぜですか?

Date now = new Date(); 
SimpleDateFormat simpledateformat = new SimpleDateFormat("D"); 
String day = simpledateformat.format(now); 
System.out.println(day); 
String ws = "http://wallpapercave.com/wp/hMwO9WT.jpg"; 

try { 
    URL Website = new URL(ws); 
} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} 
ReadableByteChannel rbc = Channels.newChannel(Website.openStream()); 
FileOutputStream fos = new FileOutputStream("weed.jpg"); 
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 
+0

'try'のスコープのために' Website'が定義されていて、 'try'ブロックの外に出てももう存在しないので – SomeJavaGuy

答えて

3

あなたはtry-の範囲内Websiteを定義しキャッチブロックであるため、ブロックの外側にはメソッドの残りの部分は表示されません。

すぐに解決できるのは、tryが始まる前にそれを宣言することです。

URL website = null; 
try { 
    website = new URL(ws); 
} 
catch (MalformedURLException e) { 
    e.printStackTrace(); 
} 
ReadableByteChannel rbc = Channels.newChannel(website.openStream()); 
FileOutputStream fos = new FileOutputStream("weed.jpg"); 
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); 

またwebsiteが、それを使用する前に定義されているか確認する必要があります、またはあなたもtry-catchブロックの中に上記の最後の3行を移動することができます。変数名に小文字で始まるJavaコーディング規約に従って、変数名にwebsiteを使用したことに注意してください。

+0

tryブロックの前に宣言すると、" Duplicate local変数ウェブサイト " – CrimsonK9

+0

@ CrimsonK9これは、あなたが' try'ブロックの中に 'URL website 'を表示したためです。ウェブサイト変数を2回宣言しないでください。エラーメッセージがあなたに伝えているものです。 –

関連する問題