我有一个在我的程序开始时被调用的方法,当我运行 jar 时它工作正常,但是当我运行 jnlp 文件时它崩溃了。
public void newImg(String i)
{
try
{
File file = new File(i);
img = ImageIO.read(file);
}
}
顺便说一下,img 是一个缓冲图像。
赔率是您提供给文件的路径或权限不匹配。将 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
$
也许您没有正确加载图像。不要使用文件的相对位置。这对于每个操作系统都是不同的。您应该像这样正确加载 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)
确保您具有正确的文件名/路径。
确保您对文件系统具有文件访问权限。