2012-07-25 8 views
5

फ्रीज करता है जब मैं एक फ़ाइल डाउनलोड करने का प्रयास करता हूं (इस मामले में यह केवल एक छवि है लेकिन असली एप्लिकेशन एक अद्यतन तंत्र है), InputStreamread पर जमा हो रहा है। मुझे पूरा यकीन है कि मेरा कोड ठीक है, इसलिए मैं सोच रहा हूं कि ऐसा क्यों होता है और यदि यह सिर्फ मेरे कंप्यूटर पर है। क्या कोई इसे चला सकता है? कृपया ध्यान दें कि Timer बस डिबगिंग उद्देश्यों के लिए है।जावा का उपयोग करके फ़ाइलों को डाउनलोड करना यादृच्छिक रूप से

कृपया धन्यवाद। विस्तार से करने के लिए आईपीवी 6 आईपीवी 4 की तुलना में एक उच्च प्राथमिकता देता है कि - 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

मैं एक समस्या के बिना एक पंक्ति में यह 10x भाग गया। –

+0

मैंने अभी अपने सिस्टम पर कोड की कोशिश की है और जोकर को डाउनलोड करने में कोई समस्या नहीं है :)। यह XUbuntu 12.4 पर IcedTea 6 JRE के साथ है। मेरे लिए एकमात्र चीज है जो लूप में आउटपुट स्ट्रीम को फ्लश करना है - लेकिन मुझे नहीं लगता कि इससे कुछ भी कैसे बदलेगा। – bchurchill

+0

मैं कोशिश करूँगा। यह लगभग हर बार जब मैं कोशिश करता हूं फ्रीज करता है! – rtheunissen

उत्तर

5

समस्या आप का सामना कर रहे जावा 7 के कारण होता है:

यहां पर एक विडियो समस्या दिखा है।

आप के रूप में यह प्रणाली संपत्ति की स्थापना System.setProperty("java.net.preferIPv4Stack", "true");

यह समस्या सभी जावा आधारित सॉफ्टवेयर को प्रभावित करता है, लेकिन केवल कुछ कंप्यूटरों पर होता है (प्रयुक्त इंटरनेट कनेक्शन पर निर्भर हो सकता) द्वारा जावा 6 में इस्तेमाल किया गया था आईपीवी 4 के लिए वापस इसे बदल सकते हैं : Downloads stops - “TCP Window Full”

0

ठीक है मुझे लगता है कि यह एक लगी प्रणाली है या जो मेरे ऊपर उत्तर दिया है (रॉबर्ट मुझे लगता है) लेकिन आईपीवी 6 का उपयोग करना कठिन होगा यदि आप पहले से ही ipv4 के बारे में नहीं हैं।

बस एक coincedence मैं रॉबर्ट नामित कर रहा हूँ :)

संबंधित मुद्दे