【发布时间】:2009-06-17 05:43:14
【问题描述】:
我是 Java 新手(我来自 ActionScript 背景),我想知道是否有办法在小程序中下载和监控远程 jar 文件的下载进度,然后使用类和其他资源在下载的 jar 中。我知道有一个 JarURLConnection 类,但我找不到通过该类监控下载进度的方法。
我需要这样做的原因是因为我正在尝试将 JavaFX 小程序分成模块,按需下载。
【问题讨论】:
我是 Java 新手(我来自 ActionScript 背景),我想知道是否有办法在小程序中下载和监控远程 jar 文件的下载进度,然后使用类和其他资源在下载的 jar 中。我知道有一个 JarURLConnection 类,但我找不到通过该类监控下载进度的方法。
我需要这样做的原因是因为我正在尝试将 JavaFX 小程序分成模块,按需下载。
【问题讨论】:
下载所有 Jar 文件的默认行为通常是可以接受的,它会下载并显示一个进度条,但听起来您需要拆分内容。 AFAIK,手动下载类并添加到类路径(或自定义类加载器)不能在没有签署你的小程序的情况下完成,这是我猜你不想遵循的路径。
您可能想看看lazy downloading,自 Java 1.6 更新 10 起可用。
在不知道您的确切要求的情况下,我对如何拆分它的一般建议是下载初始 Jar 中的所有类文件并根据需要下载资源(图像/声音/属性)。
如何从小程序中下载的代码:
URL url = new URL(getCodeBase(), filename);
URLConnection urlConnection = url.openConnection();
BufferedInputStream bufferedInputStream = null;
try {
bufferedInputStream = new BufferedInputStream(urlConnection.getInputStream());
// ... input data
} finally {
if (bufferedInputStream != null) {
bufferedInputStream.close();
}
}
【讨论】:
您可以定义一个自定义ClassLoader 并将其用于您的远程模块。这将让您准确控制类字节如何传输到您的小程序。如果您想一次加载整个 JAR 文件,您可以让您的自定义类加载器在需要时下载 JAR 文件并使用 JarInputStream 解压缩它们。
【讨论】: