Почему класс java-URL не распознает определенные протоколы?
URL u = новый URL ( "telnet://route-server.exodus.net" );
Эта строка генерирует:
java.net.MalformedURLException: неизвестный протокол: telnet
И я сталкиваюсь с аналогичными проблемами с другими URL-адресами, которые начинаются с "news://"
Это URL-адреса, извлеченные из ODP, поэтому я не понимаю, почему такие исключения возникают.
Ответы
Ответ 1
Вопрос
Java выбрасывает MalformedURLException
, потому что не может найти URLStreamHandler
для этого протокола. Проверьте подробности javadocs конструкторов.
Резюме:
Поскольку класс URL
имеет метод openConnection
, класс URL проверяет, чтобы Java знал, как открыть соединение с правильным протоколом. Без URLStreamHandler
для этого протокола Java отказывается создавать URL
, чтобы спасти вас от сбоя при попытке вызвать openConnection
.
Решение
Вероятно, вы должны использовать класс URI
, если вы не планируете открывать соединение этих протоколов в Java.
Ответ 2
Похоже, что в вашем приложении нет зарегистрированного обработчика протокола telnet. Поскольку класс URL можно использовать для открытия InputStream для URL-адреса, ему необходимо иметь зарегистрированного обработчика протокола для выполнения этой работы, если вам разрешено создавать объект, используя его.
Подробнее о том, как добавить обработчики, см. ниже: http://docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html
Ответ 3
Вы получаете эту ошибку, потому что java не имеет стандартного обработчика протокола для telnet.
Ответ 4
Простой ответ заключается в том, что он распознает только определенные протоколы, а оставшаяся часть бесконечности протоколов не распознается.