2010-03-09 12 views
23

URL u = nuovo URL ("telnet: //route-server.exodus.net");perché la classe URL di java non riconosce determinati protocolli?

Questa linea sta generando:

java.net.MalformedURLException: protocollo sconosciuta: telnet

E ho incontrato problemi simili con altri URL che iniziano con "news: //"

Questi sono URL estratte dal ODP, così io non capisco il motivo per cui tali eccezioni derivano ..

+0

Grazie a tutti, ho imparato qualcosa di nuovo .. – trinity

risposta

40

Problema

Java genera un MalformedURLException perché non è stato trovato uno URLStreamHandler per tale protocollo. Controllare il javadocs dei costruttori per i dettagli.

Sommario:

Poiché la classe URL ha un metodo openConnection, i controlli di classe URL per assicurarsi che Java sa come aprire una connessione del protocollo corretto. Senza uno URLStreamHandler per tale protocollo, Java rifiuta di creare un URL per salvarti dall'errore quando tenti di chiamare openConnection.

Soluzione

Probabilmente si dovrebbe utilizzare la classe URI se non si ha intenzione di aprire un collegamento di questi protocolli in Java.

+0

oppure, uno può implementare il proprio URLStreamHandler –

+1

Grazie mille. La classe URI è la soluzione per me. – Liuting

+0

Posso ancora inviare dati (usando l'URI)? – Lealo

4

Sembra che non ci sia un gestore registrato per il protocollo "telnet" nella propria applicazione. Poiché la classe URL può essere utilizzata per aprire un InputStream all'URL, è necessario che un gestore registrato per il protocollo esegua questo lavoro se si deve consentire la creazione di un oggetto che lo utilizza.

Per i dettagli su come aggiungere gestori vedere: http://docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html

+0

Il collegamento è interrotto. –

+0

@CookieMonster ringrazia. Aggiustato. –

2

La semplice risposta è che solo fa riconoscere determinati protocolli e il resto dei protocolli infinito non viene riconosciuto.