Использование JarURLConnection Я могу прочитать файл (например, VERSION.TXT) из баночки , размещенный на Dropbox используя следующую структуру кода:Закрытие JarURLConnection
public static void checkForUpdates() {
JarURLConnection jarConn = null;
try {
System.out.println("Checking for updates..");
URL updateURL = new URL("jar:https://www.dropbox.com/s/.../foo.jar?dl=1!/version.txt");
jarConn = (JarURLConnection) updateURL.openConnection();
JarFile jarFile = jarConn.getJarFile();
InputStream inputStream = jarFile.getInputStream(jarConn.getJarEntry());
BufferedReader versionTXT = new BufferedReader(new InputStreamReader(inputStream));
/* Version comparing left out */
// If there is an update:
System.out.println("Update found!");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (jarConn != null) {
// This doesn't seem to work
jarConn.getInputStream().close();
}
}
}
Она работает правильно, когда я вызовите этот метод в первый раз; вы можете увидеть задержку между сообщением «проверка обновлений» и сообщением «результат».
Когда я загрузить новую foo.jar на Dropbox, и запустить checkForUpdates() метод снова (без перезапуска виртуальной машины Java), он будет использовать «старый» банку, и нет никакой задержки между проверкой & сообщения результатов. Когда I do перезапустите JVM, он будет использовать «новую» банку и показать задержку между сообщениями.
Есть ли способ закрыть JarURLConnection, кроме закрытия InputStream (который, похоже, не работает)?
Я попытался следующие вещи:
- Закрытие JarURLConnection в OutputStream -> Выдает ошибку о том, что соединение не имеет OutputStream.
- Закрытие URLConnections INPUT- & OutputStream (создавая новую переменную, прежде чем я бросил его в JarURLConnection) -> Закрытие InputStream, кажется, не делать ничего, и закрывая OutputStream бросает ту же ошибку.
- Закрытие BufferedReader -> Без эффекта.
Если это не представляется возможным, чтобы закрыть JarURLConnection, можно создать новую, ли воссоединиться? Перезапуск JVM, по-видимому, делает то, что он повторно соединяет, можно ли имитировать это без перезапуска JVM?
Заранее спасибо.
вы можете сделать попытку - ресурс вместо? https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html – chrisl08
Я только что протестировал ресурс try на моем InputStream и BufferedReader, но нет никакой разницы. – Semx11