У меня есть апплет, который выдает исключение java.security.AccessControlException при попытке доступа к веб-странице.Я знаю, что апплетам разрешен доступ только к тому же хосту, с которого они сами были загружены.Рассматриваемая веб-страница находится на том же хосте, но я все еще получаю эту ошибку.
Ошибка не возникает при первом запуске апплета.Когда браузер перезапускается и апплет перезапускается, возникает исключение.Если страница затем перезагружается, исключение исчезает.
Ошибка происходит из этого кода:
JTextPane.setPage(URL);
Перед этим кодом существуют другие веб-ресурсы, которые загружаются апплетом, и онине выбрасывайте никаких исключений.
Выдается выбрасываемое исключение:
java.security.AccessControlException: access denied
(java.net.SocketPermission 131839-QR1WS02:18080 connect,resolve)
java.lang.RuntimeException: java.security.AccessControlException: access
denied (java.net.SocketPermission 131839-QR1WS02:18080 connect,resolve)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getHeaderField(Unknown Source)
at java.net.HttpURLConnection.getResponseCode(Unknown Source)
at javax.swing.JEditorPane.getStream(Unknown Source)
at javax.swing.JEditorPane.setPage(Unknown Source)
at Browser.setPage(Browser.java:76)
Сразу после создания этого исключения, другая веб-страница с почти таким же URL-адресом доступна без проблем.
Есть идеи, почему это происходит, казалось бы, случайно?
Я тестировал с различными браузерами с одинаковым результатом.
Спасибо!
Обновление: похоже,ошибка с JTextPane.setPage (URL).Я сделал обходной путь, подобный следующему:
try {
pane.setPage(u);
} catch (Exception e) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(u.openStream()));
String page = "";
while(reader.ready()) {
page += reader.readLine();
}
pane.setContentType("text/html");
pane.setText(page);
} catch (Exception e1) {
}
}
По сути, если setPage (URL) выдает исключение, этот код вместо этого попытается загрузить содержимое того же URL-адреса и вручную установить содержимое JTextPane,Пока что, похоже, это исправляет ошибку.