当我使用以下代码下载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
答案 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是一种很好的方法来完成后台任务。它内置了对更新进度信息的支持。