0

我有一个在我的程序开始时被调用的方法,当我运行 jar 时它工作正常,但是当我运行 jnlp 文件时它崩溃了。

public void newImg(String i)
{
    try
    {
        File file = new File(i);
        img = ImageIO.read(file);
    }
}

顺便说一下,img 是一个缓冲图像。

4

3 回答 3

2

赔率是您提供给文件的路径或权限不匹配。将 File ctor 放入 try 块中,捕获异常,并找出它是什么。

它应该看起来像这样:

try {
    File file =  new File(i);
    img = ImageIO.read(file);
} catch (Exception ex) {
    // You probably want to open the java console, or use a logger
    // as a JNLP may send stderr someplace weird.
    Systemm.err.println("Exception was: ", ex.toString());
}

您拥有的代码对异常没有任何作用。

您可能想查看 Java 教程中的异常线程

更新

看我的评论。我只是尝试了一些东西并确认了我的想法——带有 atry {}和 no的代码catch甚至finally不会编译。如果这确实是您认为正在使用的代码,那么您可能一直在加载旧的类文件;这个还没有编译。

$ cat Foo.java 
public class Foo {
     public void tryit() {
         try {
             File f = new File(null);
         }
     }
}
$ javac Foo.java
Foo.java:3: 'try' without 'catch' or 'finally'
         try {
         ^
1 error
$ 
于 2009-03-02T00:55:44.443 回答
1

也许您没有正确加载图像。不要使用文件的相对位置。这对于每个操作系统都是不同的。您应该像这样正确加载 JAR 中的图像:

URL url = this.getClass().getResource("image.jpg");
Image img = Toolkit.getDefaultToolkit().getImage(url);

这将加载一个名为 image.jpg 的文件,该文件与类位于同一位置。如果 File.pathSeparator 在其他位置,您也可以使用它。

使用以下两种方法之一将其作为资源加载:

http://java.sun.com/javase/6/docs/api/java/lang/Class.html#getResource(java.lang.String) http://java.sun.com/javase/6/docs/ api/java/lang/Class.html#getResourceAsStream(java.lang.String)

于 2009-03-02T02:38:08.190 回答
-1

确保您具有正确的文件名/路径。

确保您对文件系统具有文件访问权限。

于 2009-03-20T17:59:01.507 回答