2011-08-12 67 views
3

是否可以获取创建ImageIcon的文件的位置?检索ImageIcon的路径

内部ImageIcon有一个它的位置的临时私人URL,当调试时会显示它的路径,但我不知道如何访问它。有什么建议么?

这里就是我的意思是,

public String getPath(ImageIcon icon){ 
    return ????; 
} 
+1

*“有什么建议吗?”*如果您描述了您试图达到的目标,而不是您打算用来实现该目标的策略,那么您通常会得到更好的答案。目标是什么? –

+0

@Andrew从我的图像图标中获取表示底层图像路径的字符串。 – Andrew

+1

建议:展示如何创建ImageIcon,提供一些上下文。我*假设*你的意思是在一个JPanel中,但这是一个*假设*,因为你没有提供足够的细节。 –

回答

4

您可以使用反射来访问私有字段,但如果ImageIcon未与URL创建的域将是null。如果您自己创建ImageIcon,您可以在地图上跟踪URL

ImageIcon icon = ... 
Class<? extends ImageIcon> clazz = icon.getClass(); 
Field urlField = clazz.getDeclaredField("location"); 
urlField.setAccessible(true); 

URL location = (URL) urlField.get(icon); 

还值得考虑的是字段名称可能会在将来的版本中更改,这可能会产生异常。

2

你试过getDescription()

我只是这么说,因为在public ImageIcon(String filename)的文档中列出了getDescription()在“另请参见”下。

注意:请参阅Jeffrey的评论。

+0

+1,如果他没有在构造函数中单独提供描述或使用'setDescription(String)'设置它,这将起作用。 – Jeffrey

+0

@Jeffrey所以你们说的是,在一般情况下,除了通过反射之外,没有**保证**方式获得ImageIcons原始文件路径? – Andrew

+0

@Andrew Yup。保持跟踪它是唯一的保证方式。 – Jeffrey