我有一个包含该代码的表单:
public Form()
{
initComponents();
try
{
File file= new File("avatar.jpg");
BufferedImage image= ImageIO.read(file);
}
catch (IOException ex)
{
System.out.println("Failed to load image");
}
}
问题是代码总是抛出IOException并进入catch块 所以没有读取文件 我用Netbeans 7.2创建了这个项目,目录如下所示:
有什么问题?也许该文件不应该在父目录中?或者是什么?
答案 0 :(得分:1)
看起来你的命名空间为poker.*
这一切都取决于jvm的初始化位置。
你的主力在哪里?它在/Users/ramy/NetBeansProjects/Poker/src
吗?
另外,我建议您使用getResource()
来满足所有文件加载需求,特别是在jar中。
this.getClass().getResource("/resource/buttons1.png")
or
this.getClass().getResourceAsStream("/resource/TX_Jello2.ttf")
您可以通过执行以下操作找到程序默认路径的位置:
System.getProperty("user.dir");
答案 1 :(得分:1)
您的图片是否包装在您的罐子里?找到这个,提取你的jar文件就像你普通的zip文件,并检查图像是否在那里(通常位于 jarname \ packagename \ filename 。如果是这样,那么你需要提取使用getResourceAsStream()
将您的图片作为资源。
这将是:
public class Test {
private static final String absName = "/yourpackage/yourimage.jpg";
public static void main(String[] args) {
Class c=null;
try {
c = Class.forName("yourpackage.Test");//pkg is the package name in which the resource lies
} catch (Exception ex) {
// This should not happen.
}
InputStream s = c.getResourceAsStream(absName);
// do something with it.
}
public InputStream getResourceAsStream(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader();
if (cl==null) {
return ClassLoader.getSystemResourceAsStream(name); // A system class.
}
return cl.getResourceAsStream(name);
}
public java.net.URL getResource(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader();
if (cl==null) {
return ClassLoader.getSystemResource(name); // A system class.
}
return cl.getResource(name);
}
private String resolveName(String name) {
if (name == null) {
return name;
}
if (!name.startsWith("/")) {
Class c = this;
while (c.isArray()) {
c = c.getComponentType();
}
String baseName = c.getName();
int index = baseName.lastIndexOf('.');
if (index != -1) {
name = baseName.substring(0, index).replace('.', '/') + "/" + name;
}
} else {
name = name.substring(1);
}
return name;
}
}
<强>参考:强>
答案 2 :(得分:0)
如果没有看到错误,我会说最可能的原因是找不到文件。所以我建议你用File构造函数中的“avatar.jpg”替换它的绝对文件路径。 e.g。
File file = new File("INSERT_PATH_TO_FILE/avatar.jpg");
答案 3 :(得分:0)
您无法假设图像将“存在”,因为.java与图像之间的相对路径似乎没问题。
访问资源取决于您的“种类”项目(Web,独立....)。在您的情况下,您可以尝试从类路径中获取图像
final File inputFile = new ClassPathResource("....").getFile();
final BufferedImage inputImg = ImageIO.read(inputFile);