如何在Java中引发MalformedURLException

时间:2020-03-06 14:46:57  来源:igfitidea点击:

我的意思是,Java如何确定可用的协议?我从Eclipse内部运行了一些代码,效果很好。然后,我从Eclipse外部运行相同的代码,并得到"未知协议" MalformedURLException。可能与代码库有关吗?任何提示都会有所帮助。

谢谢!

解决方案

解析协议的工作是由URLStreamHandler完成的,URLStreamHandler按照协议的小写形式存储在URL.handlers中。反过来,该处理程序由位于URL.factory的URLStreamHandlerFactory创建。也许日食在闹鬼吗?

一些URL构造函数采用流处理程序,我们可以使用URL.setURLStreamHandlerFactory设置工厂。

这是有关开发协议处理程序的网络文章。

可能是类路径问题。如果使用的协议依赖于所包含的某些库(jar),然后从eclipse中导出JAR,则eclipse之外的运行代码可能找不到我们包含在项目中的JAR文件。我们需要在jar中的清单文件指向所需的库。

此处介绍了定义协议处理程序的Java标准方法:
http://java.sun.com/developer/onlineTraining/protocolhandlers/

这依赖于引导(?)类加载器上可用的协议处理程序类。这在OSGi(以及Eclipse)中效果不佳。 OSGi提供了围绕该机制的包装程序,以允许捆绑软件/插件贡献协议处理程序。
请参阅:http://www.osgi.org/javadoc/r4v41/org/osgi/service/url/URLStreamHandlerService.html

Eclipse还提供了自己的协议:bundle-resource(iirc),该协议绝对不能在Eclipse之外运行。