我有一个功能:
public static ImageIcon GetIconImageFromResource(String path){
URL url = ARMMain.class.getResource(path);
return new ImageIcon(url);
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但如果我将我的.JAR文件放在例如C:\ Ares !!!\myfile.jar上它就会失败,我看不到我的图标.我发现我的URL是文件:/ C:/ Ares !!!/myfile.jar!/com/test/images/img.png.所以在JAR扩展之后就有了!符号!我认为这是主要原因!我该怎么做才能避免这个问题?谢谢.
这显然是Java的一个问题(不仅仅是一个bug).JAR URL !/用作分隔符,但在文件路径中出现时不会将其转义.
你可以尝试自己逃避它,Ares!!!/变成Ares!!%21/,但保持myfile.jar!/原样.
根据RFC3986,!是一个保留的子分隔符char.因此,使用它来分隔URL中的不同部分是安全的; 当它出现在一个部件内时,它必须被转义为%21
但是,处理JAR URL的Java代码显然遵循较旧的RFC2396,其中!是一个无保留的char.Java选择一个未保留的char作为分隔符是不明智的.当它发生时,它应该至少在内部逃脱它,好像保留了字符.
| 归档时间: |
|
| 查看次数: |
445 次 |
| 最近记录: |