Java - 文件下载使程序停止

时间:2014-06-09 14:10:45

标签: java multithreading download window fileoutputstream

当我使用以下代码下载Java文件时,我无法再使用该程序,它没有响应。但是当下载完成后我可以再次使用它。

URL website = new URL("MY_URL");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("grafik");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

我该如何解决?例如。显示加载屏幕或弹出对话框? 在此先感谢:D

2 个答案:

答案 0 :(得分:2)

了解concurrency的精彩世界的时间!

new Thread(new Runnable() {
    @Override
    public void run() {
        URL website = new URL("MY_URL");
        ReadableByteChannel rbc = Channels.newChannel(website.openStream());
        FileOutputStream fos = new FileOutputStream("grafik");
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
    }
}).start();

执行此操作将启动一个单独的线程 - 基本上另一行执行帽的行为独立于它所产生的那个。这将允许您的用户界面在此活动单独发生时继续运行。

但是,一旦你开始希望不同的线程进行交互,并发可能会非常棘手。一定要看看这篇文章中链接的Oracle教程。

答案 1 :(得分:0)

如果您正在开发Java桌面应用程序并使用Swing,那么SwingWorker是一种很好的方法来完成后台任务。它内置了对更新进度信息的支持。