显示Windows 7的ImageIcon png文件的正确途径是什么?

时间:2013-05-19 05:08:01

标签: java swing path embedded-resource imageicon

我想测试一个带有简单png图像的程序。我写了一个简短的程序来做到这一点,但我似乎无法让路径正确。我已经检查,再次检查,重新检查,并检查了我的路径名称四倍,但没有正确,但无论我做什么,这个图像都不会显示。我使用了Oracle在ImageIcon文档(creaetImageIcon())中编写的一个简短类来完成此任务,但它似乎没有帮助。我将在下面发布整个程序,因为它很短。

package practiceImages;

import java.awt.BorderLayout;
import java.awt.Toolkit;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class ImageIconGUITest {

    public static void main(String[] args) {
        ImageIconGUITest gui = new ImageIconGUITest();
        gui.display();
    }

    private ImageIcon createImageIcon(String path, String description) {
        java.net.URL imgURL = getClass().getResource(path);
        if (imgURL != null) {
            return new ImageIcon(imgURL, description);
        } else {
            System.err.println("Couldn't find file: " + path);
            return null;
        }
    }

    private void display() {
        JFrame frame = new JFrame();
        JLabel label = new JLabel(createImageIcon(
                "Users/Evan/javaItems/Sprites_and_Other_Art/green.png", "the color green"));

        frame.add(BorderLayout.CENTER, label);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}

6 个答案:

答案 0 :(得分:9)

getResource(String)方法只能查找应用程序的运行时类路径上的资源。由于此图像看起来像应用程序资源(即由您作为应用程序的一部分提供),因此放在运行时类路径上。

E.G。大多数IDE都有一个可以在项目结构中放置资源的地方,这些资源将在运行时自动包含在内。将图像移动(或复制)到该路径。

然后提供正确的String就成了问题。让我们想象一下你的项目是这样的:

  • SRC
    1. COM
      • 我们的
        1. Application.java
    2. 资源
      • green.png

所以Application.java位于package com.our;,而图片位于resources/green.png路径中。

如果从Application访问图像,正确的路径将是(请滚筒滚动..)

"/resources/green.png"

备注

  1. 领先/很重要。它告诉JRE我们想要从“类路径的根”中查找图像,而不是使用相对于类本身的包的路径。
  2. 正确的案件也至关重要。一串"/resources/green.png" 找到名为"/resources/Green.png" {{的图片1}}。
  3. Eclipse路径

    1. 右键单击"/resources/green.PNG"目录,选择菜单底部的src
      Eclipse properties
    2. 导航(使用不使用Eclipse的正常方式)到Properties的目录。 Eclipse properties showing project Location
    3. 然后转到父目录。
    4. 您应该看到一个Location目录,其中包含类和(希望)图像。

答案 1 :(得分:4)

首先,您提供了相对路径,因此系统正在查找相对于您执行程序的位置的图像。

其次,路径应具有驱动器规格或至少为前导/。根据您的设置,“C:/Users/Evan/javaItems/Sprites_and_Other_Art/green.png”应该可以使用(您可能需要更改驱动器规格以满足您的系统)

第三,确保文件存在于指定位置,System.out.println(new File("C:/Users/Evan/javaItems/Sprites_and_Other_Art/green.png").exists())应该返回true,否则文件位于错误的位置。

相对路径基本上是指相对于程序执行的路径位置。因此,如果您从C:/Program Files/MyAwesomeApplication运行程序,Users/Evan/javaItems/Sprites_and_Other_Art/green.png的相对路径将成为C:/Program Files/MyAwesomeApplication/Users/Evan/javaItems/Sprites_and_Other_Art/green.png的绝对路径。这描述了从根位置到相关文件/文件夹的路径。

您可以使用System.out.println(new File("C:/Users/Evan/javaItems/Sprites_and_Other_Art/green.png").getAbsolutePath(‌​))进行测试,这将为您提供完整路径。

答案 2 :(得分:0)

使用它为我修复了它:

JButton btnBanana = new JButton("New button");
btnBanana.setIcon(new ImageIcon("D:\\Android\\Company\\images\\bananas-icon.png"));

答案 3 :(得分:0)

使用双斜线而不是一个,我有这个问题,我修复它。生病了给你一个例子:

公共司机(){

    ImageIcon us = new ImageIcon("C:\saeed.gif"); // OS cant find it 
    ImageIcon uk = new ImageIcon("C:\\saeed0.gif"); // OS can 


  JButton button = new JButton ("Click here "  , us ) ;

  button.setRolloverIcon(uk);

  add(button);
}

答案 4 :(得分:0)

要将图像的路径提供给文本字段,此代码将帮助您

txtPath.setText(lblImage.getIcon().toString());

// txtPath是文本字段使用todiplay的路径 // lblImage是显示图像的标签

答案 5 :(得分:-2)

您需要C:\\Test\\test.png而不是C:/Test/test.png