2010-03-09 16 views
23

URL u = nouvelle URL ("telnet: //route-server.exodus.net");pourquoi la classe d'URL de Java ne reconnaît pas certains protocoles?

Cette ligne génère:

java.net.MalformedURLException: protocole inconnu: telnet

Et je rencontre des problèmes similaires avec d'autres URL commençant par "nouvelles: //"

Ce sont URL extraites de ODP, donc je ne comprends pas pourquoi ces exceptions apparaissent ..

+0

Merci à tous, appris quelque chose de nouveau .. – trinity

Répondre

40

Problème

Java lève un MalformedURLException car il n'a pas pu trouver un URLStreamHandler pour ce protocole. Vérifiez les javadocs des constructeurs pour les détails.

Résumé:

Depuis la classe URL a une méthode openConnection, les contrôles de la classe URL pour vous assurer que Java sait comment ouvrir une connexion du protocole correct. Sans un URLStreamHandler pour ce protocole, Java refuse de créer un URL pour vous sauver de l'échec lorsque vous essayez d'appeler openConnection.

Solution

Vous devriez probablement utiliser la classe URI si vous ne prévoyez pas l'ouverture d'une connexion de ces protocoles en Java.

+0

ou, on peut mettre en œuvre son propre URLStreamHandler –

+1

Merci beaucoup. La classe URI est la solution pour moi. – Liuting

+0

Puis-je envoyer des données (en utilisant l'URI)? – Lealo

4

Il semble qu'il n'y ait pas de gestionnaire enregistré pour le protocole "telnet" dans votre application. Puisque la classe d'URL peut être utilisée pour ouvrir un InputStream en URL, elle doit avoir un gestionnaire enregistré pour que le protocole puisse effectuer ce travail si vous devez être autorisé à créer un objet en l'utilisant.

Pour plus de détails sur la façon d'ajouter des gestionnaires voir: http://docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html

+0

Le lien est rompu. –

+0

@CookieMonster merci. Je l'ai réparé. –

2

La réponse simple est que c'est seulement que reconnaît certains protocoles, et le reste de l'infini des protocoles n'est pas reconnu.