как исключение MalformedURLException в Java - PullRequest
2 голосов
/ 26 сентября 2008

Я имею в виду, как Java решает, какие протоколы доступны? Я запускаю некоторый код из Eclipse, и он работает просто отлично. Затем я запускаю тот же код извне Eclipse и получаю исключение MalformedURLEx «неизвестный протокол». Вероятно, это связано с базой кода, или что-то? Любые советы будут полезны.

Спасибо!

Ответы [ 3 ]

1 голос
/ 26 сентября 2008

Работа по разрешению протокола выполняется с помощью URLStreamHandler, которые хранятся в URL.handlers протоколом в нижнем регистре. Обработчик, в свою очередь, создается URLStreamHandlerFactory в URL.factory. Может быть, затмение обезьяна с этим?

Некоторые из конструкторов URL принимают потоковые обработчики, и вы можете установить фабрику с помощью URL.setURLStreamHandlerFactory .

Вот веб-пост о разработке обработчиков протокола .

0 голосов
/ 27 сентября 2008

Стандартный 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.

0 голосов
/ 26 сентября 2008

Вероятно, проблема с classpath. Если вы используете протокол, который зависит от какой-то библиотеки (jar), которую вы включили, а затем экспортировали JAR из eclipse, то файлы JAR, которые вы включили в ваш проект, вероятно, не будут найдены рабочим кодом вне eclipse. Вам нужен файл манифеста в вашем банке, который будет указывать на библиотеки, которые вам нужны.

...