我创建了一个扩展ImageIcon
的自定义类,以便传递文件网址和给定颜色,然后加载重新绘制它的图像。
这个类打包在一个.jar文件中,用于开发不同的用户界面(我们称之为UI.jar
)。
这个类应该被设想用于加载位于UI.jar
内打包的文件夹中的图像,打包在另一个.jar文件中的其他图像,带有其他网址的其他图像,可能位于未打包在.jar中的文件夹中。所以我开发了这段代码:
BufferedImage bi = null;
try{
//CASE 1: the image related to this url is packed in a .jar file
bi = ImageIO.read(resourceClass.getResource(url));
}catch(Exception e){
try{
//CASE 2: the image related to this url is somewhere else
bi = ImageIO.read(new File(url));
}catch(Exception ee){
//CASE 3: none of the above
ee.printStackTrace();
}
}
这个方法有效,但问题是我总是将resourceClass
作为我的自定义类的参数传递,它扩展了ImageIcon,这有点棘手和不舒服。
还有其他方法可以实现我的目标吗?
答案 0 :(得分:1)
我在这里看到三种选择
其中任何一个都应该做好。
在你不喜欢前三个之后你可以试试这个,但这更难看。
StackTraceElement[] se = Thread.currentThread().getStackTrace();
//se[0] = Thread.getStackTrace()
//se[1] = your method
//se[2] = your callers method
Class x = Class.forName(se[2].getClassName());
x.getResource(url);