我有一个功能:
public static ImageIcon GetIconImageFromResource(String path){
URL url = ARMMain.class.getResource(path);
return new ImageIcon(url);
}
效果很好,但是如果我将.JAR文件放在例如 C:\ Ares !!! \ myfile.jar 上,它就会失败,我看不到我的图标。我发现我的网址是文件:/ C:/ Ares !!! / myfile.jar!/com/test/images/img.png 。所以在JAR扩展之后有!符号!我认为这是主要原因!我该怎么做才能避免这个问题?感谢。
答案 0 :(得分:5)
这显然是Java的一个问题(不仅仅是一个bug)。 JAR URL使用!/
作为分隔符,但在文件路径中出现时不会将其转义。
您可以尝试自行转义,将Ares!!!/
转为Ares!!%21/
,但保持myfile.jar!/
不变。
根据RFC3986,!
是保留的子分隔符char。因此,使用它来分隔URL中的不同部分是安全的;当它出现在某个部件中时,必须以%21
但是,处理JAR URL的Java代码显然遵循较旧的RFC2396,其中!
是未预留的字符。 Java选择一个未保留的char作为分隔符是不明智的。当它发生时,它至少应该在内部逃脱它,就像保留字符一样。
答案 1 :(得分:-1)
查看URLEncoder课程。