2010-03-09 6 views
23

URL u = neue URL ("telnet: //route-server.exodus.net");Warum erkennt die URL-Klasse von Java bestimmte Protokolle nicht?

Diese Linie erzeugt:

java.net.MalformedURLException: unbekanntes Protokoll: telnet

Und ich mit anderen URLs ähnliche Probleme auftreten, die mit "news: //"

Dies sind URLs von ODP extrahiert, so dass ich nicht verstehen, warum solche Ausnahmen entstehen ..

+0

Dank an alle, lernte etwas neues .. – trinity

Antwort

40

Ausgabe

Java wirft eine MalformedURLException, weil es kein URLStreamHandler für dieses Protokoll finden konnte. Überprüfen Sie die javadocs der Konstruktoren für die Details.

Zusammenfassung:

Da die URL Klasse eine openConnection Methode hat, überprüft die URL-Klasse, um sicherzustellen, dass Java weiß, wie eine Verbindung von dem korrekten Protokoll zu öffnen. Ohne URLStreamHandler für dieses Protokoll verweigert Java die Erstellung eines URL, um Sie vor einem Fehler zu schützen, wenn Sie versuchen, openConnection aufzurufen.

Lösung

Sie wahrscheinlich mit der URI Klasse werden sollen, wenn Sie nicht vorhaben, eine Verbindung dieser Protokolle in Java beim Öffnen.

+0

oder, kann man seinen eigenen URLStreamHandler implementieren –

+1

Vielen Dank. URI-Klasse ist die Lösung für mich. – Liuting

+0

Kann ich noch Daten senden (mit URI)? – Lealo

4

Klingt, als wäre in Ihrer Anwendung kein registrierter Handler für das Protokoll "Telnet" vorhanden. Da die URL-Klasse verwendet werden kann, um einen InputStream zu URL zu öffnen, muss ein registrierter Handler für das Protokoll vorhanden sein, um diese Aufgabe ausführen zu können, wenn Sie ein Objekt damit erstellen dürfen.

Einzelheiten dazu, wie Handler hinzuzufügen sehen: http://docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html

+0

Link ist unterbrochen. –

+0

@CookieMonster danke. Behoben. –

2

Die einfache Antwort ist, dass es nur erkennt bestimmte Protokolle, und der Rest der Unendlichkeit der Protokolle wird nicht erkannt.