我想测试一个带有简单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);
}
}
答案 0 :(得分:9)
getResource(String)
方法只能查找应用程序的运行时类路径上的资源。由于此图像看起来像应用程序资源(即由您作为应用程序的一部分提供),因此应放在运行时类路径上。
E.G。大多数IDE都有一个可以在项目结构中放置资源的地方,这些资源将在运行时自动包含在内。将图像移动(或复制)到该路径。
然后提供正确的String
就成了问题。让我们想象一下你的项目是这样的:
所以Application.java
位于package com.our;
,而图片位于resources/green.png
路径中。
如果从Application
访问图像,正确的路径将是(请滚筒滚动..)
"/resources/green.png"
/
很重要。它告诉JRE我们想要从“类路径的根”中查找图像,而不是使用相对于类本身的包的路径。"/resources/green.png"
将 不 找到名为"/resources/Green.png"
或 {{的图片1}}。"/resources/green.PNG"
目录,选择菜单底部的src
。 Properties
的目录。
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