下载长文件会冻结计算机

时间:2014-11-03 15:39:08

标签: java

我为我的游戏私人制作了一个发射器。它运行良好,下载所需的一切 - 但是,由于某种原因,它冻结整个计算机!

冻结通常在做某事时发生,如果我在我的电脑上下载直到下载完成,那么没有任何反应。但是,当我在母亲的电脑上玩游戏“坦克世界”时,计算机几乎立刻冻结了。如果我玩游戏,那么启动器也会冻结我的电脑。

我使用Windows 8,我母亲使用Windows 7。

在我自己的计算机上,当发生这种情况时,我能够非常缓慢地移动鼠标(延迟30秒到2分钟之间),alt + tab赢得工作,控制+ alt +删除将起作用(但是当打开任务管理器没有出现任务管理器)。  在我的母亲和#39;计算机它基本相同,只是除了鼠标工作正常外,一切都被冻结了100%。

仅在下载大型(5MB +)文件时才会发生。当我的启动器下载较小的文件时,没有问题。

我使用以下代码下载文件:

void download(String source, String destination, int size) {

    File ofile = new File(System.getProperty("user.dir") + "", destination);
    System.out.printf("\nDownloading\n\t%s\nTo\n\t%s\n", source, destination);
    try {
        if (ofile.exists()) ofile.delete();
        if (!ofile.createNewFile()) {
            throw new IOException("Can't create " + ofile.getAbsolutePath());
        }

        int inChar = 0;
        URL url = new URL(source);
        InputStream input = url.openStream();
        FileOutputStream fos = new FileOutputStream(ofile);
        for (int i = 0; i < size && inChar != -1; i++) {
            int percentage = (int) ((i * 100.0f) / size);

            progressBar.setValue(((int) ((percentage * 100.0f) / 100)));
            fr.setTitle(ofile.getName() + ": " + progressBar.getValue() + "%" + " Total: " + oprogressBar.getValue() + "%");
            inChar = input.read();
            fos.write(inChar);
        }

        input.close();
        fos.close();
        System.out.println("Downloaded " + ofile.getAbsolutePath());
    } catch (EOFException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

在互联网上搜索时,我无法找到这种情况的副本。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:3)

也许多线程会帮助你解决这个问题。

this post

中查看更多相关信息

答案 1 :(得分:1)

缓冲输入流,或一次读取多个字符,或两者兼而有。