Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-特殊URL字符_Java - Fatal编程技术网

Java-特殊URL字符

Java-特殊URL字符,java,Java,我有一个功能: public static ImageIcon GetIconImageFromResource(String path){ URL url = ARMMain.class.getResource(path); return new ImageIcon(url); } 它工作得很好,但是如果我把我的.JAR文件放到例如C:\Ares\myfile.jar失败,我看不到我的图标。我注意到我的URL是文件:/C:/Ares/myfile.jar/com/test/imag

我有一个功能:

public static ImageIcon GetIconImageFromResource(String path){
    URL url = ARMMain.class.getResource(path);
return new ImageIcon(url);
} 

它工作得很好,但是如果我把我的.JAR文件放到例如C:\Ares\myfile.jar失败,我看不到我的图标。我注意到我的URL是文件:/C:/Ares/myfile.jar/com/test/images/img.png。因此,在JAR扩展之后就有了符号!我认为这是主要原因!我能做些什么来避免这个问题?谢谢。

看看这个类。

这显然是Java的一个问题(不仅仅是一个bug)。jarurl使用
/
作为分隔符,但当它出现在文件路径中时不会转义它

你可以试着自己逃离它,转动
Ares/进入
战神!!%21/
,但保留
myfile.jar/原样


根据RFC3986,
是保留的子分隔符字符。因此,使用它来分隔URL中的不同部分是安全的;当它出现在零件内部时,必须将其转义为
%21


然而,处理JAR URL的Java代码显然遵循较旧的RFC2396,其中
是一个未保留的字符。Java选择无保留字符作为分隔符是不明智的。当它这样做时,它至少应该像保留字符一样在内部进行转义。

你应该使用相对路径而不是静态绝对路径。如果你不觉得困难,你能解释一下怎么做吗?我有一个standart ARMMain.class.getResource(path)函数,它返回URL。我不使用
C:/XYZ/…
而使用相对路径作为
images/img.png
.GetIconImageFromResource(“images/img.png”)-我也这样做。有什么建议吗?你能把图像打包到罐子外面吗?我通常把它们放在外面,只使用images/img.png。因为我可以看到这对所有用户和程序员来说都是一个大问题。。。谢谢大家的讨论。我要合上这条线。