2008-09-26 7 views
2

Je veux dire, comment Java décide-t-il quels protocoles sont disponibles? Je cours du code à partir d'Eclipse, et ça marche très bien. Ensuite, je cours le même code de l'extérieur d'Eclipse, et j'obtiens le "protocole inconnu" MalformedURLException. Cela a probablement à voir avec la base de code, ou quelque chose? Tous les conseils seraient utiles.Comment est levée MalformedURLException en Java?

Merci!

+0

Quels protocoles? Mieux encore, avec quelles URL avez-vous des problèmes? – sblundy

Répondre

1

Le travail de résolution du protocole est effectué par le URLStreamHandler, qui sont stockés dans URL.handlers par protocole en minuscules. Le gestionnaire, à son tour, est créé par le URLStreamHandlerFactory à URL.factory. Peut-être que éclipse est monkeying avec ça?

Certains des URL constructors prennent des gestionnaires de flux et vous pouvez définir l'usine avec URL.setURLStreamHandlerFactory.

Voici un article sur le sujet developing protocol handlers.

+0

L'URL est une URL personnalisée ("media: ///") qui devrait être gérée par l'application. – Gabriel

+0

Vous avez certainement raison. Je pourrais trouver le code qui fait exactement ce que vous dites. Maintenant tout a un sens. Je vous remercie! – Gabriel

-1

Probablement un problème de chemin de classe. Si vous utilisez un protocole qui dépend d'une bibliothèque (jar) que vous avez incluse, puis que vous exportez un fichier JAR depuis eclipse, les fichiers JAR que vous avez inclus dans votre projet ne sont probablement pas détectés par le code en dehors d'eclipse. Vous avez besoin d'un fichier manifeste dans votre jar qui pointera vers les bibliothèques nécessaires.

0

La méthode standard de java de définir les gestionnaires de protocole est décrit ici: http://java.sun.com/developer/onlineTraining/protocolhandlers/

Cela repose sur la classe de gestionnaire de protocole étant disponible sur le démarrage classloader (?). Cela ne fonctionne pas bien avec OSGi (et donc Eclipse). OSGi fournit un wrapper autour de ce mécanisme pour permettre aux bundles/plugins de contribuer aux gestionnaires de protocole. Voir: http://www.osgi.org/javadoc/r4v41/org/osgi/service/url/URLStreamHandlerService.html

Eclipse fournit également son propre protocole: bundle-resource (iirc) qui ne fonctionnera certainement pas en dehors d'Eclipse.

Questions connexes