我有一个功能:
public static ImageIcon GetIconImageFromResource(String path){
URL url = ARMMain.class.getResource(path);
return new ImageIcon(url);
} 它工作得很好,但是如果我把我的.JAR文件放到例如.JAR上,它就会失败,而且我看不到我的图标。我注意到我的网址是file:/C:/Ares!!!/myfile.jar!/com/test/images/img.png.所以在JAR扩展之后,就有了!符号!我认为这是主要原因!我怎样才能避免这个问题呢?谢谢。
发布于 2012-01-10 08:16:22
这显然是Java的一个问题(不仅仅是一个bug)。JAR URL使用!/作为分隔符,但当它出现在文件路径中时不会转义。
您可以自己尝试逃离它,将Ares!!!/转换为Ares!!%21/,但是保持myfile.jar!/的原样。
根据RFC3986的说法,!是一个保留的子分隔字符。因此,使用它来分离URL中的不同部分是安全的;当它出现在一个部件中时,它必须作为%21转义
但是,处理JAR URL的Java代码显然遵循旧的RFC2396,其中!是一个无保留的字符。Java选择无保留的字符作为分隔符是不明智的。当它这样做时,它至少应该在内部摆脱它,就像保留了char一样。
发布于 2012-01-10 06:17:10
看看URLEncoder类。
https://stackoverflow.com/questions/8799296
复制相似问题