Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于Windows 7,显示ImageIcon png文件的正确路径是什么?_Java_Swing_Path_Embedded Resource_Imageicon - Fatal编程技术网

Java 对于Windows 7,显示ImageIcon png文件的正确路径是什么?

Java 对于Windows 7,显示ImageIcon png文件的正确路径是什么?,java,swing,path,embedded-resource,imageicon,Java,Swing,Path,Embedded Resource,Imageicon,我想测试一个带有简单png图像的程序。我写了一个简短的程序来实现这一点,但我似乎无法找到正确的路径。我已经检查了,再次检查了,再次检查了,四倍检查了我的路径名,以确保它不正确,但无论我做什么,此图像都不会显示。我在ImageIcon文档中使用了Oracle编写的一个简短类(creaetImageIcon())来实现这一点,但它似乎没有帮助。我将在下面发布整个程序,因为它非常简短 package practiceImages; import java.awt.BorderLayout; impo

我想测试一个带有简单png图像的程序。我写了一个简短的程序来实现这一点,但我似乎无法找到正确的路径。我已经检查了,再次检查了,再次检查了,四倍检查了我的路径名,以确保它不正确,但无论我做什么,此图像都不会显示。我在ImageIcon文档中使用了Oracle编写的一个简短类(
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);
    }
}

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

其次,路径应该有一个驱动器规范,或者至少有一个前导的
/
。根据您的设置,类似“C:/Users/Evan/javaItems/Sprites_和_Other_Art/green.png”的功能应该可以使用(您可能需要更改驱动器规格以满足您的系统要求)

第三,确保文件存在于指定位置,
System.out.println(新文件(“C:/Users/Evan/javaItems/Sprites\u and_Other\u Art/green.png”).exists()
应返回
true
,否则文件位于错误位置

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

您可以使用
System.out.println(新文件(“C:/Users/Evan/javaItems/Sprites\u和\u Other\u Art/green.png”).getAbsolutePath来测试这一点(‌​))
将为您提供完整路径。

getResource(String)方法将仅查找应用程序运行时类路径上的资源。由于此映像看起来像是应用程序资源(即,由您作为应用程序的一部分提供),因此应将其置于运行时类路径上

例如,大多数IDE都有一个可以在项目结构中放置资源的位置,该位置将在运行时自动包含。将映像移动(或复制)到该路径

然后就需要提供正确的
字符串了。让我们想象一下,您的项目是这样设置的:

  • 垃圾箱
  • src
  • com
    • 我们的
    • Application.java
  • 资源
    • green.png
因此
Application.java
位于
package com.our;
中,而图像位于路径
resources/green.png

如果从
应用程序访问图像
,正确的路径是(请使用鼓轮滚动…)

“/resources/green.png”

笔记
  • 前导的
    /
    很重要。它告诉JRE我们希望从“类路径的根”查找映像,而不是使用相对于类本身的包的路径
  • 正确的大小写也是至关重要的。一个字符串
    “/resources/green.png”
    不会找到名为
    “/resources/green.png”
    “/resources/green.png”
    的图像
  • 日食路径
  • 右键单击
    src
    目录,选择菜单底部的
    Properties

  • 导航(使用不使用Eclipse的正常方式)到
    位置的目录
  • 然后转到父目录
  • 您应该会看到一个
    bin
    目录,其中包含类和(希望)图像

  • 使用此选项可以为我修复它:

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

    使用双斜杠而不是单斜杠,我有这个问题,我已经解决了。我将向您展示一个示例:

    公共司机(){


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

    txtPath.setText(lblImage.getIcon().toString());
    
    //txtPath是用于显示路径的文本字段
    //lblImage是一个标签,它显示您需要执行的图像

    而不是
    C:\\Test\\Test.png
    首先,您提供了一个相对路径,因此系统正在查找相对于您执行程序的位置的图像。其次,路径应该有一个驱动器规范或至少一个前导的
    //co>de>。根据您的设置,类似于
    C:/Users/Evan/javaItems/Sprites\u和\u Other\u Art/green.png的功能应该可以工作(您可能需要更改驱动器规格以满足您的系统要求)@MadProgrammer您能更详细地了解相对路径吗?这意味着什么?另外,添加驱动器规格也不起作用。1-确保文件存在于指定位置
    System.out.println(新文件(“C:/Users/Evan/javaItems/Sprites_和_Other_Art/green.png”).exists()
    应返回true,否则文件位于错误的位置。2-相对路径基本上意味着相对于程序执行的路径位置。因此,如果您从
    C:/program Files/MyAwesomeApplication
    运行程序,例如,
    Users/Evan/javaItems/Sprites\u和\u other\u Art/green.png
    实际上看起来像
    C:/Program Files/MyAwesomeApplication/Users/Evan/javaItems/Sprites_和_Other_Art/green.png
    您可以使用System.out.println(新文件(“C:/Users/Evan/javaItems/Sprites_和_Other_Art/green.png”).getAbsolutePath()来测试这一点`这将为您提供完整路径。@MadProgrammer^可能想将此作为答案发布。“确保文件存在”+1完整路径为我提供了C:\Users\Evan\javaItems\Sprites\u and_Other\u Art\green.png这是怎么回事?@MadProgrammer使用
    System.out.println(新文件(“C:/Users/Evan/javaItems/Sprites\u and_Other\u Art/green.png”).getAbsolutePath))
    刚刚给了我相同的路径。@user2398233当然,这已经是绝对的了
    txtPath.setText(lblImage.getIcon().toString());