我的意思是,Java 如何决定哪些协议可用?我从 Eclipse 内部运行了一些代码,它工作得很好。然后我从 Eclipse 外部运行相同的代码,我得到“未知协议”MalformedURLException。可能它与代码库有关,还是什么?任何提示都会有所帮助。
谢谢!
我的意思是,Java 如何决定哪些协议可用?我从 Eclipse 内部运行了一些代码,它工作得很好。然后我从 Eclipse 外部运行相同的代码,我得到“未知协议”MalformedURLException。可能它与代码库有关,还是什么?任何提示都会有所帮助。
谢谢!
解析协议的工作由 完成,按协议以小写URLStreamHandler
形式存储。URL.handlers
反过来,处理程序由URLStreamHandlerFactory
at创建URL.factory
。也许日食在开玩笑?
一些URL 构造函数采用流处理程序,您可以使用URL.setURLStreamHandlerFactory设置工厂。
这是一篇关于开发协议处理程序的网络帖子。
这里描述了定义协议处理程序的 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 之外工作。
可能是类路径问题。如果您使用的协议依赖于您包含的某个库 (jar),然后从 eclipse 中导出了一个 JAR,则您在项目中包含的 JAR 文件可能不会被 eclipse 之外的运行代码找到。您需要一个清单文件在您的 jar 中,该文件将指向所需的库。