使用Swing从本地目录获取图像?

时间:2013-02-11 19:31:09

标签: java swing embedded-resource

我尝试将图像从本地目录加载到ImageIcon(URL)。这个图像文件从.jar文件访问.jar文件名是swingex.jar。项目结构如

F:/>SwingExample
         |
         |___src
         |
         |___build.xml
         |
         |___lib
               |
               |___swingsex.jar(generated through build.xml file)
         |
         |__resource
                   |
                   |_____images
                            |
                            |___logo1.png

如何阅读logo1.png文件?

我想要这样

  1. file:///f://resources//images//processedimages//返回null

  2. ClassLoader.getSystemResource("resources/images/processedimages/");返回null

  3. 更新: -              我仍然有问题。因为我在SwingExample上创建了jar文件,并且排除了资源/图像目录。当运行jar文件时,它无法识别资源/图像文件夹。但是我通过eclipse运行SwingExample项目工作正常。代码是< / p>

    File directory = new File (".");
    Image img = null;
    String path="";
    URL url=null;
    try {
      path=directory.getCanonicalPath()+"/resources/images/logo1.png";
                   img = ImageIO.read(new File(getDefaultImageUploadPath());
    
    } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
            return new ImageIcon(img);
    

3 个答案:

答案 0 :(得分:3)

URL imgURL =
   new File( "F:/SwingExample/resource/images/logo1.png" ).toURI().toURL();

但我建议将资源放入src。

如果资源在src中,您可以轻松地通过类加载器访问它们。

getClassLoader().getResourceAsStream( "resource/images/logo1.png" );

答案 1 :(得分:1)

根据应用程序的执行上下文,您可以使用相对路径

URL imgURL = new File( "resource/images/logo1.png" ).toURI().toURL();

或者

URL imgURL = new File( "../resource/images/logo1.png" ).toURI().toURL();

可能会工作,但Aubin是正确的,将图像嵌入应用程序并通过类加载器上下文访问会更容易

答案 2 :(得分:0)

对于java项目,默认目录始终从src开始。只有在以下方式组织资源时,您的代码才能正常运行.... :)

SwingExample
         |
         |___src
         |    |
         |    |_____resource
         |          |
         |          |_____images
         |                   |
         |                   |___logo1.png
         |___build.xml
         |
         |___lib
               |
               |___swingsex.jar(generated through build.xml file)

这次getClassLoader().getResourceAsStream( "/resource/images/logo1.png" );不会返回null。