Вопрос

Я имею в виду, как 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.Вам нужен файл манифеста в вашей банке, который будет указывать на необходимые библиотеки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top