2010-03-09 39 views
23

URL u = URL mới ("telnet: //route-server.exodus.net");Tại sao lớp URL của java không nhận ra một số giao thức nhất định?

Dòng này được tạo ra:

java.net.MalformedURLException: giao thức không rõ: telnet

Và tôi gặp phải vấn đề tương tự với các URL khác mà bắt đầu bằng "tin tức: //"

Đây là những URL chiết xuất từ ​​ODP, do đó, tôi không hiểu tại sao trường hợp ngoại lệ như vậy phát sinh ..

+0

Nhờ tất cả, đã học được điều gì đó mới .. – trinity

Trả lời

40

Issue

Java ném một số MalformedURLException vì nó không thể tìm thấy số URLStreamHandler cho giao thức đó. Kiểm tra các javadocs của các nhà thầu để biết chi tiết.

Tóm tắt:

Kể từ khi lớp URL có một phương pháp openConnection, kiểm tra lớp URL để đảm bảo rằng Java biết làm thế nào để mở một kết nối của giao thức chính xác. Nếu không có URLStreamHandler cho giao thức đó, Java từ chối tạo URL để giúp bạn tránh khỏi thất bại khi bạn cố gắng gọi openConnection.

Giải pháp

Bạn có lẽ nên được sử dụng lớp URI nếu bạn không có kế hoạch mở một kết nối của những giao thức trong Java.

+0

hoặc, người ta có thể thực hiện URLStreamHandler riêng của mình –

+1

Cảm ơn rất nhiều. Lớp URI là giải pháp cho tôi. – Liuting

+0

Tôi vẫn có thể gửi dữ liệu (sử dụng URI) không? – Lealo

4

Có vẻ như không có trình xử lý đăng ký cho giao thức "telnet" trong ứng dụng của bạn. Vì lớp URL có thể được sử dụng để mở một InputStream đến URL, nó cần phải có một trình xử lý đã đăng ký cho giao thức để thực hiện công việc này nếu bạn được phép tạo một đối tượng bằng cách sử dụng nó.

Để biết chi tiết về cách thêm xử lý xem: http://docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html

+0

Liên kết bị hỏng. –

+0

@CookieMonster cảm ơn. Sửa lỗi. –

2

Câu trả lời đơn giản là chỉ không nhận ra các giao thức nhất định và phần còn lại của vô hạn các giao thức không được nhận dạng.

Các vấn đề liên quan