2008-09-26 65 views
2

我的意思是,Java如何決定哪些協議可用?我從Eclipse內部運行一些代碼,它工作得很好。然後我從Eclipse外部運行相同的代碼,並且得到「未知協議」MalformedURLException。可能它與代碼庫有關,或者什麼?任何提示都會有所幫助。Java中如何引發MalformedURLException

謝謝!

+0

什麼protocals?更好的是,你遇到什麼URL? – sblundy 2008-09-26 13:06:11

回答

1

解析協議的工作由URLStreamHandler完成,它們通過協議以小寫形式存儲在URL.handlers中。處理程序又由URLStreamHandlerFactoryURL.factory創建。也許月食會與此廝混?

一些URL constructors採取流處理程序,您可以使用URL.setURLStreamHandlerFactory設置工廠。

這是關於developing protocol handlers的網頁。

+0

該URL是一些應該由應用程序處理的自定義URL(「media:///」)。 – Gabriel 2008-09-26 13:11:02

-1

可能是類路徑問題。如果您使用的協議取決於您包含的某個庫(jar),然後從eclipse導出JAR,那麼您包含在項目中的JAR文件可能不會被eclipse之外的運行代碼找到。你需要一個清單文件在你的jar中指向需要的庫。定義的協議處理程序的

0

Java標準方式這裏描述: http://java.sun.com/developer/onlineTraining/protocolhandlers/

這依賴於協議處理程序類是可用上的引導加載器(?)。這對OSGi(以及Eclipse)並不適用。 OSGi提供了這個機制的包裝,允許bundle/plugins貢獻協議處理程序。 參見:http://www.osgi.org/javadoc/r4v41/org/osgi/service/url/URLStreamHandlerService.html

Eclipse還提供了自己的協議:bundle-resource(iirc),它絕對不會在Eclipse之外工作。