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