从资源或不同文件夹加载图像

时间:2016-03-31 10:56:40

标签: java imageicon javax.imageio getresource

我创建了一个扩展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,这有点棘手和不舒服。

还有其他方法可以实现我的目标吗?

1 个答案:

答案 0 :(得分:1)

我在这里看到三种选择

  1. 的getClass()。的getResource(字符串)
  2. ImplementationClassName.class.getResource(字符串)
  3. Reflection.getCallerClass()。的getResource(字符串)
  4. 其中任何一个都应该做好。

    在你不喜欢前三个之后你可以试试这个,但这更难看。

    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);