как создается исключение MalformedURLException в Java
-
02-07-2019 - |
Вопрос
Я имею в виду, как Java решает, какие протоколы доступны?Я запускаю некоторый код изнутри Eclipse, и он работает нормально.Затем я запускаю тот же код снаружи Eclipse и получаю исключение MalformedURLException «неизвестного протокола».Возможно, это связано с кодовой базой или чем-то еще?Любые подсказки будут полезны.
Спасибо!
Решение
Работу по разрешению протокола выполняет URLStreamHandler
, которые хранятся в URL.handlers
по протоколу строчными буквами.Обработчик, в свою очередь, создается URLStreamHandlerFactory
в URL.factory
.Может быть, затмение с этим балуется?
Некоторые из Конструкторы URL возьмите обработчики потока, и вы можете установить фабрику с помощью URL.setURLStreamHandlerFactory.
Вот веб-сообщение о разработка обработчиков протоколов.
Другие советы
Стандартный способ определения обработчиков протоколов Java описан здесь:http://java.sun.com/developer/onlineTraining/protocolhandlers/
Это зависит от того, что класс обработчика протокола доступен в загрузчике классов загрузки (?).Это не очень хорошо работает с OSGi (и, следовательно, с Eclipse).OSGi предоставляет оболочку для этого механизма, позволяющую пакетам/плагинам добавлять обработчики протоколов.Видеть: http://www.osgi.org/javadoc/r4v41/org/osgi/service/url/URLStreamHandlerService.html
Eclipse также предоставляет собственный протокол:Bundle-resource (iirc), который определенно не будет работать вне Eclipse.
Вероятно, проблема с путем к классам.Если вы используете протокол, который зависит от какой-либо библиотеки (jar), которую вы включили, а затем экспортировали JAR из eclipse, файлы JAR, которые вы включили в свой проект, вероятно, не будут найдены работающим кодом вне eclipse.Вам нужен файл манифеста в вашей банке, который будет указывать на необходимые библиотеки.