1

数日前、私は頭痛の種となる深刻な問題に遭遇しました。

すべてのJavaベースのツール(Eclipse、Maven、Android SDKローダー...)には、特定のファイルのダウンロードに問題があります。ダウンロードはランダムに停止します。

スーパーユーザーでの問題についてはすでに説明しましたが、誰も私の問題を解決することができませんでした。したがって、自分でいくつかのテストを実行し始め、この質問の最後にサンプルコードを作成しました。

興味深いのは、バッファサイズが問題に与える影響が小さいことです。バッファサイズを1024に減らすと、ほとんどの場合、ダウンロードは完了します。

このコードは私のWindowsシステムでのみ問題を引き起こしますか?

明確にするために:私はJavaでダウンロードプログラムを開発したくありません-したがって、サンプルコードを修正しても私は役に立ちません-コードは問題を実証するためだけのものです。

public static void main(String[] args) {
    try {
        URL url = new URL("http://mirror.netcologne.de/maven2/com/google/android/android/2.3.3/android-2.3.3.jar");

        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        InputStream in = conn.getInputStream();
        byte[] buffer = new byte[10485760]; // 10MiB
        long read = 0;
        while (true) {
            int bytes = in.read(buffer, 0, buffer.length);
            if (bytes < 0)
                break;
            read += bytes;
            System.out.println("Bytes read: " + read);
        }
        conn.disconnect();
        System.out.println("Finished");
    } catch (Exception e) {
        e.printStackTrace();
    }
}
4

1 に答える 1

1

あなたが直面している問題はJava7によって引き起こされます-詳細には、IPv6にIPv4よりも高い優先順位を与えます。

この問題はすべてのJavaベースのソフトウェアに影響しますが、一部のコンピューターでのみ発生します(使用されているインターネット接続や、スイッチ、ルーターなどのローカルネットワークコンポーネントによって異なる場合があります)。

システムプロパティを設定することで、Java6で使用されていたIPv4に戻すことができます。java.net.preferIPv4Stack=true

このプロパティの設定は、アプリケーションごとに異なります。Eclipseの場合は、eclipse.iniで設定する必要があります。

Andoird SDKマネージャーの場合、ファイルを編集し、ファイルの終わり近くにあるJava呼び出しにtools\android.batパラメーターを追加する必要があります。-Djava.net.preferIPv4Stack=true

于 2012-07-25T14:36:48.470 に答える