5

我想测试一个带有简单 png 图像的程序。我写了一个简短的程序来做到这一点,但我似乎无法找到正确的路径。我已经检查,再次检查,重新检查,并四次检查我的路径名称是否正确,但无论我做什么,这个图像都不会显示。我使用 Oracle 在 ImageIcon 文档 (the 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);
    }
}
4

6 回答 6

10

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

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

然后它变成提供正确的问题String。让我们想象一下您的项目是这样设置的:

  • 垃圾桶
  • 源代码
    1. com
      • 我们的
        1. 应用程序.java
    2. 资源
      • 绿色.png

所以Application.javapackage com.our;,而图像在路径中resources/green.png

如果从 访问图像Application,正确的路径是(请打鼓..)

"/resources/green.png"

笔记

  1. 主导/很重要。它告诉 JRE 我们要从“类路径的根”中查找图像,而不是使用相对于类本身的包的路径。
  2. 正确的案例也很重要。字符串"/resources/green.png"不会定位名为or图像。"/resources/Green.png" "/resources/green.PNG"

Eclipse 路径

  1. 右键单击src目录,Properties在菜单底部选择。
    Eclipse 属性
  2. 导航(使用在没有 Eclipse 的情况下使用的正常方式)到Location. 显示项目位置的 Eclipse 属性
  3. 然后转到父目录。
  4. 您应该会看到一个bin包含类和(希望如此)图像的目录。
于 2013-05-19T05:31:18.683 回答
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(‌​))which 来测试它,这将为您提供完整路径。

于 2013-05-19T05:31:13.417 回答
0

使用它为我修复了它:

JButton btnBanana = new JButton("New button");
btnBanana.setIcon(new ImageIcon("D:\\Android\\Company\\images\\bananas-icon.png"));
于 2014-12-13T03:17:24.267 回答
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);
}
于 2014-12-24T19:59:51.277 回答
0

要将图像的路径获取到文本文件,此代码将帮助您

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

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

于 2015-07-16T07:53:23.177 回答
-2

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

于 2016-04-21T18:04:40.507 回答