我正在使用一个独立的java程序,它使用javahelp系统作为帮助文件。该程序有一堆内置的"模块",用户可以在运行时选择这些模块来对数据进行各种分析。我正在添加运行插件模块的功能,这些插件模块被放置在插件文件夹中,这样其他开发人员就可以创建他们自己的算法。
我从插件文件夹中的。class文件开始,以及javahelp .hs文件和支持文档(.xml, .html, .map等)。我能够从plugins文件夹中读取。hs文件并与主程序帮助系统合并,没有问题。
然后我把所有的文件捆绑在一个jar中,因为这是我们想象的大多数开发人员分发插件的方式。.class文件仍然可以加载和运行,但现在我不能再加载.hs文件了。HelpSet类需要一个URL,其中包含.hs文件的位置。我是否告诉它查看jar文件内部?
以防有人遇到同样的问题,我的问题是我用来从jar文件内部访问帮助集文件的路径名称的格式。格式(来自这里的JavaHelp用户指南的4.6.7节)是将URL格式化为:
URL helpSetLoc = new URL("jar:file:" + File.separator + pluginList.get(i).getJarFile()+"!/"+pluginList.get(i).getHelpSetName());
我的getJarFile()
方法返回jar文件的名称(包括绝对路径)。我的getHelpSetName
方法返回包名和帮助集名,由正斜杠分隔,如myPlugin/pluginHelp.hs
。
我的问题是我使用的是File。包名和帮助集文件名之间的分隔符,在windows中返回反斜杠。我还尝试了一个双反斜杠,它做了同样的事情。我必须使用正斜杠,否则HelpSet构造函数无法找到文件。