2012-07-25 6 views
5

ファイルをダウンロードしようとすると(この場合は画像ですが、実際のアプリケーションは更新メカニズムです)、InputStreamreadでフリーズしているようです。私は自分のコードが大丈夫だと確信しているので、なぜこれが起こり、それが私のコンピュータ上にあるのだろうと思います。誰かがこれを実行してもらえますか? Timerはデバッグ目的のためのものです。Javaを使用してファイルをランダムにダウンロードする

ありがとうございました。 IPv6にはIPv4よりも高い優先順位を与えることを詳細に - Video

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.*; 
import java.net.URL; 
import javax.swing.Timer; 

public class FileDownloader { 

    public final static int BUFFER_LENGTH = 1 << 14; 

    private static Timer timeoutTimer = new Timer(5000, new ActionListener(){ 
     @Override 
     public void actionPerformed(ActionEvent e) { 
      System.out.println("Timeout"); 
      System.exit(0); 
     } 
    }); 

    public static void main(String [] args) throws Exception{ 
     URL url = new URL("http://host.trivialbeing.org/up/tdk-aug3-jokr-high-res-2.jpg"); 
     download(url, new File("joker.jpg")); 
    } 

    public static void download(final URL url, final File dest) throws IOException { 
     FileOutputStream fos = new FileOutputStream(dest); 
     BufferedOutputStream out = new BufferedOutputStream(fos); 
     BufferedInputStream in = new BufferedInputStream(url.openStream()); 
     byte[] buf = new byte[BUFFER_LENGTH]; 
     int bytesRead; 
     int bytesWritten = 0; 
     timeoutTimer.start(); 
     while ((bytesRead = in.read(buf, 0, BUFFER_LENGTH)) != -1) { 
      timeoutTimer.restart(); 
      out.write(buf, 0, bytesRead); 
      out.flush(); 
      bytesWritten += bytesRead; 
      System.out.println(bytesWritten/1024 + " kb written"); 
     } 
     in.close(); 
     out.close(); 

     System.out.println("Finished"); 
     fos.close(); 
    } 
} 
+0

私は問題なく10回連続して実行しました。 –

+0

私のシステムでコードを試したところ、ジョーカーをダウンロードしても何の問題もありませんでした:)。これはIcedTea 6 JREを使ったXUbuntu 12.4上です。私には唯一起こっているのは、ループ内の出力ストリームをフラッシュすることですが、どのように変化するのかは分かりません。 – bchurchill

+0

私はそれを試みます。それは私がそれを試みるたびにほとんどフリーズする! – rtheunissen

答えて

5

あなたが直面している問題は、Java 7によって引き起こされる:

は、ここで問題点を示すビデオです。

それはSystem.setProperty("java.net.preferIPv4Stack", "true");

この問題は、すべてのJavaベースのソフトウェアに影響を与えますが、唯一の(使用のインターネット接続に依存してもよい)一部のコンピュータで発生し、システムのプロパティを設定することにより、Java 6で使用されたとしてあなたは、IPv4に戻ってそれを変更することができます:Downloads stops - “TCP Window Full”

0

OK私はそれが私の上に答えた男によってラグシステムまたは何(ロバートは、私は思う) が、IPv6を使用して、ハードになるだろうと思うあなたは既にいない程度のIPv4多くの場合。

私はロバートにちなんで名付けました:)

関連する問題